双人贪吃蛇小游戏C++原创
生活随笔
收集整理的這篇文章主要介紹了
双人贪吃蛇小游戏C++原创
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大家好,我是小鴨醬,博客地址為:http://www.cnblogs.com/xiaoyajiang
/*貪吃蛇*/ #include<stdio.h> #include<time.h> #include<conio.h> #include<stdlib.h> #include<windows.h> char qipan[20][80]; int snake = 1; int change(int *head, int *tail, int *score, char *direction, int zuobiao[2][80]) { int x, y; switch(*direction) { case 72: x = zuobiao[0][*head]-1; y = zuobiao[1][*head]; break; case 87: x = zuobiao[0][*head]-1; y = zuobiao[1][*head]; break; case 80: x = zuobiao[0][*head]+1; y = zuobiao[1][*head]; break; case 83: x = zuobiao[0][*head]+1; y = zuobiao[1][*head]; break; case 75: x = zuobiao[0][*head]; y = zuobiao[1][*head]-1; break; case 65: x = zuobiao[0][*head]; y = zuobiao[1][*head]-1; break; case 68: x = zuobiao[0][*head]; y = zuobiao[1][*head]+1; break; default: x = zuobiao[0][*head]; y = zuobiao[1][*head]+1; } if(qipan[x][y] == '_' || qipan[x][y] == '|' || qipan[x][y] == '*') return 1; if(qipan[x][y] == ' ') { qipan[zuobiao[0][*tail]][zuobiao[1][*tail]]=' '; *tail=(*tail+1)%80; qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*'; *head=(*head+1)%80; zuobiao[0][*head]=x; zuobiao[1][*head]=y; qipan[x][y]='#'; return 0; } if(qipan[x][y] == '@') { qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*'; *head=(*head+1)%80; zuobiao[0][*head]=x; zuobiao[1][*head]=y; qipan[x][y]='#'; *score += 1; return 0; } } void gotoxy(int x,int y)//位置函數 { COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void color(int a)//顏色函數 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a); } void show_start() { gotoxy(20,0); color(1); int u; for(u = 0; u < 18; u ++) printf("* "); gotoxy(20, 12); for(u = 0; u < 18; u ++) printf("* "); gotoxy(28,2); color(13); printf("S N A K E ?G A M E"); gotoxy(31, 5); color(14); printf("#"); gotoxy(34, 5); color(11); printf("One ?snake"); gotoxy(34, 7); printf("Two ?snakes"); gotoxy(28,9); printf("The speed you want: "); gotoxy(31, 5); char temp = 'a'; color(14); while(1) { while(!kbhit()); temp = getch(); if(temp == 72 || temp == 80) { gotoxy(31,5+2*(snake-1)); printf(" "); snake = snake % 2 + 1; gotoxy(31,5+2*(snake-1)); printf("#"); gotoxy(31,5+2*(snake-1)); } if(temp == 13) break; } gotoxy(27,10); color(10); printf("GOOD ?LUCK ?TO ?YOU ?!"); } int main() { srand(time(0)); int head1 = 3, tail1 = 0, score1 = 0; int head2 = 3, tail2 = 0, score2 = 0; int zuobiao1[2][80]; int zuobiao2[2][80]; /*棋盤 20×80 初始化*/ for(int i = 0; i < 20; i++) { for(int j = 0; j < 80; j++) { qipan[i][j] = ' '; } } for(int i = 0; i < 20; i++) { qipan[i][0] = qipan[i][79] = '|';//第一列、最后一列是墻20*1 } for(int i = 0; i < 80; i++) { qipan[0][i] = qipan[19][i] = '_';//第一行、最后一行是墻1*80 } /*蛇的坐標 2×8 初始化, 將蛇放到棋盤上*/ int x1 = 1, x2 = 18, y, temp = 0; for(int m = tail1; m < head1; m++) { zuobiao1[0][m] = x1;//初始行號 y = zuobiao1[1][m] = ++temp;//初始列號 qipan[x1][y] = '*'; } zuobiao1[0][head1] = x1;//初始行號 y = zuobiao1[1][head1] = ++temp;//初始列號 qipan[x1][y] = '#';//蛇頭 show_start(); if(snake == 2) { temp = 0; for(int m = tail2; m < head2; m++) { zuobiao2[0][m] = x2;//初始行號 y = zuobiao2[1][m] = ++temp;//初始列號 qipan[x2][y] = '*'; } zuobiao2[0][head2] = x2;//初始行號 y = zuobiao2[1][head2] = ++temp;//初始列號 qipan[x2][y] = '#';//蛇頭 } clock_t start; int timeover; char direction1 = 77;//72 88 75 77 char direction2 = 68;//87 83 65 68 char new_direction; char new_direction1 ; char new_direction2 ; int gamespeed; gotoxy(48, 9); color(14); scanf("%d", &gamespeed); int rand_i = rand()%18 + 1; int rand_j = rand()%78 + 1; qipan[rand_i][rand_j] = '@'; system("cls"); gotoxy(10, 1); color(10); printf("Your present score: "); gotoxy(30, 1); color(11); printf("%d", score1); gotoxy(0,4); for(int i = 0; i < 20; i++)//打印出棋盤 for(int j = 0; j < 80; j++) { if(qipan[i][j] == '*' || qipan[i][j] == '#') color(13); else if(qipan[i][j] == '@') color(12); else color(15); printf("%c", qipan[i][j]); } while(1)//87 83 65 68 { for(int i = 0; i < 20; i++)//打印出棋盤 for(int j = 0; j < 80; j++) { if(qipan[i][j] == '*' || qipan[i][j] == '#') { gotoxy(j, i+4); color(13); } if(qipan[i][j] == '@') { gotoxy(j, i+4); color(12); } if(qipan[i][j] == '_' || qipan[i][j] == '|') { gotoxy(j, i+4); color(15); } printf("%c", qipan[i][j]); } for(int q = 0; q < 3; q++) { gotoxy(rand()%78 + 1, rand()%18 + 5 ); color(14); printf("+"); } start = clock(); timeover = 1; while(!kbhit() && (timeover = clock() - start/CLOCKS_PER_SEC <= gamespeed)); if(timeover)//有按鍵 { if(snake == 1) getch(); new_direction = getch(); if(snake == 2) { if(new_direction == 87 || new_direction ==83 ||new_direction == 65||new_direction == 68) { new_direction2 = new_direction; new_direction1 = direction1; if(new_direction2 + direction2 == 170 || new_direction2 + direction2 == 133) { change(&head1, &tail1, &score1, &direction1, zuobiao1); change(&head2, &tail2, &score2, &direction2, zuobiao2); continue; } } if(new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77) { new_direction1 = new_direction; new_direction2 = direction2; if(new_direction1 + direction1 == 152) { change(&head1, &tail1, &score1, &direction1, zuobiao1); change(&head2, &tail2, &score2, &direction2, zuobiao2); continue; } } } if(snake == 1 && (new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77)) { new_direction1 = new_direction; if(new_direction1 + direction1 == 152) { change(&head1, &tail1, &score1, &direction1, zuobiao1); continue; } } } else { if(snake == 2) { new_direction2 = direction2; new_direction1 = direction1; } else { new_direction1 = direction1; } } if(snake == 1) { direction1 = new_direction1; if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1) { system("cls"); gotoxy(30,10); color(7); printf("G A M E ?O V E R !"); gotoxy(0,20); color(1); return 0; } } if(snake == 2) { direction1 = new_direction1; if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1) { system("cls"); gotoxy(30,8); color(7); printf("G A M E ?O V E R !"); gotoxy(30,10); printf("Snake Two is the Hero!"); gotoxy(0,20); color(1); return 0; } direction2 = new_direction2; if(change(&head2, &tail2, &score2, &direction2, zuobiao2) == 1) { system("cls"); gotoxy(30,8); color(7); printf("G A M E ?O V E R !"); gotoxy(30,10); printf("Snake One is the Hero!"); gotoxy(0,20); color(1); return 0; } } int randnew = 0; for(int i = 0; i < 20; i++)//打印出棋盤 for(int j = 0; j < 80; j++) if(qipan[i][j] == '@') { randnew ++; } if(randnew == 0) { rand_i = rand()%18 + 1; rand_j = rand()%78 + 1; qipan[rand_i][rand_j] = '@'; } if(snake == 2 && randnew == 1) { rand_i = rand()%18 + 1; rand_j = rand()%78 + 1; qipan[rand_i][rand_j] = '@'; } gotoxy(30, 1); printf("%d", score1); if(snake == 2) { gotoxy(30,2); printf("%d", score2); } } }
/*貪吃蛇*/ #include<stdio.h> #include<time.h> #include<conio.h> #include<stdlib.h> #include<windows.h> char qipan[20][80]; int snake = 1; int change(int *head, int *tail, int *score, char *direction, int zuobiao[2][80]) { int x, y; switch(*direction) { case 72: x = zuobiao[0][*head]-1; y = zuobiao[1][*head]; break; case 87: x = zuobiao[0][*head]-1; y = zuobiao[1][*head]; break; case 80: x = zuobiao[0][*head]+1; y = zuobiao[1][*head]; break; case 83: x = zuobiao[0][*head]+1; y = zuobiao[1][*head]; break; case 75: x = zuobiao[0][*head]; y = zuobiao[1][*head]-1; break; case 65: x = zuobiao[0][*head]; y = zuobiao[1][*head]-1; break; case 68: x = zuobiao[0][*head]; y = zuobiao[1][*head]+1; break; default: x = zuobiao[0][*head]; y = zuobiao[1][*head]+1; } if(qipan[x][y] == '_' || qipan[x][y] == '|' || qipan[x][y] == '*') return 1; if(qipan[x][y] == ' ') { qipan[zuobiao[0][*tail]][zuobiao[1][*tail]]=' '; *tail=(*tail+1)%80; qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*'; *head=(*head+1)%80; zuobiao[0][*head]=x; zuobiao[1][*head]=y; qipan[x][y]='#'; return 0; } if(qipan[x][y] == '@') { qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*'; *head=(*head+1)%80; zuobiao[0][*head]=x; zuobiao[1][*head]=y; qipan[x][y]='#'; *score += 1; return 0; } } void gotoxy(int x,int y)//位置函數 { COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void color(int a)//顏色函數 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a); } void show_start() { gotoxy(20,0); color(1); int u; for(u = 0; u < 18; u ++) printf("* "); gotoxy(20, 12); for(u = 0; u < 18; u ++) printf("* "); gotoxy(28,2); color(13); printf("S N A K E ?G A M E"); gotoxy(31, 5); color(14); printf("#"); gotoxy(34, 5); color(11); printf("One ?snake"); gotoxy(34, 7); printf("Two ?snakes"); gotoxy(28,9); printf("The speed you want: "); gotoxy(31, 5); char temp = 'a'; color(14); while(1) { while(!kbhit()); temp = getch(); if(temp == 72 || temp == 80) { gotoxy(31,5+2*(snake-1)); printf(" "); snake = snake % 2 + 1; gotoxy(31,5+2*(snake-1)); printf("#"); gotoxy(31,5+2*(snake-1)); } if(temp == 13) break; } gotoxy(27,10); color(10); printf("GOOD ?LUCK ?TO ?YOU ?!"); } int main() { srand(time(0)); int head1 = 3, tail1 = 0, score1 = 0; int head2 = 3, tail2 = 0, score2 = 0; int zuobiao1[2][80]; int zuobiao2[2][80]; /*棋盤 20×80 初始化*/ for(int i = 0; i < 20; i++) { for(int j = 0; j < 80; j++) { qipan[i][j] = ' '; } } for(int i = 0; i < 20; i++) { qipan[i][0] = qipan[i][79] = '|';//第一列、最后一列是墻20*1 } for(int i = 0; i < 80; i++) { qipan[0][i] = qipan[19][i] = '_';//第一行、最后一行是墻1*80 } /*蛇的坐標 2×8 初始化, 將蛇放到棋盤上*/ int x1 = 1, x2 = 18, y, temp = 0; for(int m = tail1; m < head1; m++) { zuobiao1[0][m] = x1;//初始行號 y = zuobiao1[1][m] = ++temp;//初始列號 qipan[x1][y] = '*'; } zuobiao1[0][head1] = x1;//初始行號 y = zuobiao1[1][head1] = ++temp;//初始列號 qipan[x1][y] = '#';//蛇頭 show_start(); if(snake == 2) { temp = 0; for(int m = tail2; m < head2; m++) { zuobiao2[0][m] = x2;//初始行號 y = zuobiao2[1][m] = ++temp;//初始列號 qipan[x2][y] = '*'; } zuobiao2[0][head2] = x2;//初始行號 y = zuobiao2[1][head2] = ++temp;//初始列號 qipan[x2][y] = '#';//蛇頭 } clock_t start; int timeover; char direction1 = 77;//72 88 75 77 char direction2 = 68;//87 83 65 68 char new_direction; char new_direction1 ; char new_direction2 ; int gamespeed; gotoxy(48, 9); color(14); scanf("%d", &gamespeed); int rand_i = rand()%18 + 1; int rand_j = rand()%78 + 1; qipan[rand_i][rand_j] = '@'; system("cls"); gotoxy(10, 1); color(10); printf("Your present score: "); gotoxy(30, 1); color(11); printf("%d", score1); gotoxy(0,4); for(int i = 0; i < 20; i++)//打印出棋盤 for(int j = 0; j < 80; j++) { if(qipan[i][j] == '*' || qipan[i][j] == '#') color(13); else if(qipan[i][j] == '@') color(12); else color(15); printf("%c", qipan[i][j]); } while(1)//87 83 65 68 { for(int i = 0; i < 20; i++)//打印出棋盤 for(int j = 0; j < 80; j++) { if(qipan[i][j] == '*' || qipan[i][j] == '#') { gotoxy(j, i+4); color(13); } if(qipan[i][j] == '@') { gotoxy(j, i+4); color(12); } if(qipan[i][j] == '_' || qipan[i][j] == '|') { gotoxy(j, i+4); color(15); } printf("%c", qipan[i][j]); } for(int q = 0; q < 3; q++) { gotoxy(rand()%78 + 1, rand()%18 + 5 ); color(14); printf("+"); } start = clock(); timeover = 1; while(!kbhit() && (timeover = clock() - start/CLOCKS_PER_SEC <= gamespeed)); if(timeover)//有按鍵 { if(snake == 1) getch(); new_direction = getch(); if(snake == 2) { if(new_direction == 87 || new_direction ==83 ||new_direction == 65||new_direction == 68) { new_direction2 = new_direction; new_direction1 = direction1; if(new_direction2 + direction2 == 170 || new_direction2 + direction2 == 133) { change(&head1, &tail1, &score1, &direction1, zuobiao1); change(&head2, &tail2, &score2, &direction2, zuobiao2); continue; } } if(new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77) { new_direction1 = new_direction; new_direction2 = direction2; if(new_direction1 + direction1 == 152) { change(&head1, &tail1, &score1, &direction1, zuobiao1); change(&head2, &tail2, &score2, &direction2, zuobiao2); continue; } } } if(snake == 1 && (new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77)) { new_direction1 = new_direction; if(new_direction1 + direction1 == 152) { change(&head1, &tail1, &score1, &direction1, zuobiao1); continue; } } } else { if(snake == 2) { new_direction2 = direction2; new_direction1 = direction1; } else { new_direction1 = direction1; } } if(snake == 1) { direction1 = new_direction1; if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1) { system("cls"); gotoxy(30,10); color(7); printf("G A M E ?O V E R !"); gotoxy(0,20); color(1); return 0; } } if(snake == 2) { direction1 = new_direction1; if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1) { system("cls"); gotoxy(30,8); color(7); printf("G A M E ?O V E R !"); gotoxy(30,10); printf("Snake Two is the Hero!"); gotoxy(0,20); color(1); return 0; } direction2 = new_direction2; if(change(&head2, &tail2, &score2, &direction2, zuobiao2) == 1) { system("cls"); gotoxy(30,8); color(7); printf("G A M E ?O V E R !"); gotoxy(30,10); printf("Snake One is the Hero!"); gotoxy(0,20); color(1); return 0; } } int randnew = 0; for(int i = 0; i < 20; i++)//打印出棋盤 for(int j = 0; j < 80; j++) if(qipan[i][j] == '@') { randnew ++; } if(randnew == 0) { rand_i = rand()%18 + 1; rand_j = rand()%78 + 1; qipan[rand_i][rand_j] = '@'; } if(snake == 2 && randnew == 1) { rand_i = rand()%18 + 1; rand_j = rand()%78 + 1; qipan[rand_i][rand_j] = '@'; } gotoxy(30, 1); printf("%d", score1); if(snake == 2) { gotoxy(30,2); printf("%d", score2); } } }
轉載于:https://www.cnblogs.com/xiaoyajiang/p/5950310.html
總結
以上是生活随笔為你收集整理的双人贪吃蛇小游戏C++原创的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android5开机动画耗时,Andro
- 下一篇: 求调和平均值