"

欧冠竞猜买球官网-欧冠网上买球官网拥有全球最顶尖的原生APP,每天为您提供千场精彩体育赛事,欧冠竞猜买球官网-欧冠网上买球官网更有真人、彩票、电子老虎机、真人电子竞技游戏等多种娱乐方式选择,欧冠竞猜买球官网-欧冠网上买球官网让您尽享娱乐、赛事投注等,且无后顾之忧!

"
首頁 > 貪吃蛇C語言代碼

貪吃蛇C語言代碼

互聯網 2021-04-12 23:22:40
貪吃蛇C語言代碼

貪吃蛇C語言代碼手動貪吃蛇智能貪吃蛇

1.手動貪吃蛇 /*蛇越長跑得越快*//*作者:SGAFPZ*/#include #include #include #include //#include #include #include #include void food();void show();void move();void turn();void check();void ini();//void calculate();//int movable[4] = { 0, 1, 1, 0 };//數組的下標表示方向,0123分別表示上下左右,下同//int distance[4] = { 9999, 9999, 9999, 9999 };intdy[4] = { 0, 1, 0, -1 };intdx[4] = { -1, 0, 1, 0 };int sum = 5;//蛇總長度int over = 0;int speed; //int foodx, foody;//食物的坐標char map[17][17];struct snake {int x, y;//身體坐標 int dir;//方向(只有蛇頭的方向是有用的) } A[100];void ini() {//初始化界面speed = 500;over = 0;sum = 5;//movable[0] = 0; movable[1] = 1; movable[2] = 1; movable[3] = 0;//distance[0] = 9999; distance[1] = 9999; distance[2] = 9999; distance[3] = 9999;int i, j;for (i = 0; i < 100; i++) {//初始化蛇頭和蛇身的數據A[i].dir = 0;A[i].x = 0;A[i].y = 0;}A[0].x = 1; A[0].y = 1;//地圖左上角設置一條長度為5的蛇A[1].x = 1; A[1].y = 2;A[2].x = 1; A[2].y = 3;A[3].x = 1; A[3].y = 4;A[4].x = 1; A[4].y = 5; A[4].dir = 1;srand(time(0));for (i = 0; i < 17; i++) {//設置地圖for (j = 0; j < 17; j++) {map[i][j] = '*';}}for (i = 1; i < 16; i++) {for (j = 1; j < 16; j++) {map[i][j] = ' ';}}//map[6][5] = '*'; map[6][6] = '*'; map[6][7] = '*';//map[7][5] = '*'; map[7][7] = '*';map[A[4].x][A[4].y] = 'H';//設置蛇頭for (i = 0; i < sum - 1; i++) {//設置蛇身map[A[i].x][A[i].y] = 'X';}food();//calculate();}void show() {//顯示界面 int i, j, x, y;for (i = 0; i < 17; i++) {//顯示界面for (j = 0; j < 17; j++) {printf("%c", map[i][j]);}printf("\n");}while (1) {Sleep(speed);//界面刷新速度turn();move();if (over) {//設置蛇死掉后可以進行的操作 while (1) {char ch = _getch();if (ch == 113) {//輸入‘q’結束 return;}else if (ch == 114) {//輸入‘r’重新開始 ini();break;}}}system("cls");//清屏 for (i = 0; i < 17; i++) {//重新顯示界面for (j = 0; j < 17; j++) {printf("%c", map[i][j]);}printf("\n");}//calculate(); //計算并記錄蛇頭與食物距離}}void food() {//生成食物int x, y;while (1) {x = (int)(15 * rand() / (RAND_MAX + 1.0));//隨機產生一組食物坐標y = (int)(15 * rand() / (RAND_MAX + 1.0));if (map[x][y] == ' ') {//如果是空格則在該處生成食物map[x][y] = 'O';//foodx = x;//記錄食物坐標 //foody = y;break;}}}void move() {//蛇移動int i, x, y;int t = sum;//t記錄當前蛇總長度 check();//移動前檢查按當前方向移動一步后的情況if (t == sum) {//沒有吃到蘋果for (i = 0; i < sum - 1; i++) {if (i == 0) {//蛇尾坐標處變成空格,把蛇尾坐標變成前一個蛇身的坐標 map[A[i].x][A[i].y] = ' ';A[i].x = A[i + 1].x;A[i].y = A[i + 1].y;}else {//每個蛇身坐標都變為它前一個蛇身的坐標A[i].x = A[i + 1].x;A[i].y = A[i + 1].y;}map[A[i].x][A[i].y] = 'X';//把地圖上蛇身坐標處的字符設置成‘X’}A[sum - 1].x = A[sum - 1].x + dx[A[sum - 1].dir];//蛇頭按當前方向移動一格 A[sum - 1].y = A[sum - 1].y + dy[A[sum - 1].dir];map[A[sum - 1].x][A[sum - 1].y] = 'H';//把地圖上蛇頭坐標處的字符設置成‘H’}else {//吃到蘋果(sum會加1)map[A[sum - 2].x][A[sum - 2].y] = 'X';//把地圖上原蛇頭坐標處的字符設置成‘X’A[sum - 1].x = A[sum - 2].x + dx[A[sum - 2].dir];//新蛇頭的坐標是原蛇頭沿當前方向移動一格后的坐標 A[sum - 1].y = A[sum - 2].y + dy[A[sum - 2].dir];A[sum - 1].dir = A[sum - 2].dir;//新蛇頭方向為原蛇頭的方向map[A[sum - 1].x][A[sum - 1].y] = 'H';//把地圖上蛇頭坐標處的字符設置成‘H’food();}/*for(i = 0; i < 4; i++) {//記錄下能走的方向x = A[sum - 1].x + dx[i];y = A[sum - 1].y + dy[i];if(map[x][y] == ' ' || map[x][y] == 'O') {movable[i] = 1;//能走就把對應方向的值設置為1 } else {if(x != A[0].x || y != A[0].y) {movable[i] = 0;//不能走就把對應方向的值設置為0 } else {movable[i] = 1;}}}*/}void check() {//檢查是否死亡或者吃到食物int x, y, i, j;x = A[sum - 1].x + dx[A[sum - 1].dir];//記錄按當前方向移動一格后蛇頭的坐標 y = A[sum - 1].y + dy[A[sum - 1].dir];if (map[x][y] == '*' || map[x][y] == 'X') {//如果地圖上該坐標處字符為‘*’或‘X’就死亡 if (x != A[0].x || y != A[0].y) {//蛇尾除外 map[8][4] = 'G'; map[8][5] = 'A'; map[8][6] = 'M'; map[8][7] = 'E';//輸出“GAME OVER” map[8][9] = 'O'; map[8][10] = 'V'; map[8][11] = 'E'; map[8][12] = 'R';map[8][8] = ' ';system("cls");for (i = 0; i < 17; i++) {for (j = 0; j < 17; j++) {printf("%c", map[i][j]);}printf("\n");}printf("Input 'r' to restart\nInput 'q' to quit\n");over = 1;}}else if (map[x][y] == 'O') {//吃到蘋果 sum++;//蛇身總長加1 speed = ((600 - sum * 20)>100) ? (600 - sum * 20) : 100; //速度加快 }}void turn() {//轉彎if (_kbhit()) {char dir = _getch();//讀取輸入的鍵 switch (dir) {//改變方向 case 119: A[sum - 1].dir = (A[sum - 1].dir == 2)?2:0; break;case 100: A[sum - 1].dir = (A[sum - 1].dir == 3)?3:1; break;case 115: A[sum - 1].dir = (A[sum - 1].dir == 0)?0:2; break;case 97: A[sum - 1].dir = (A[sum - 1].dir == 1)?1:3; break;}}}/*void calculate() {//計算并記錄蛇頭與食物距離int i = 0, x, y;for(i = 0; i < 4; i++) {if(movable[i] == 1) {//如果該方向能走,則記錄下沿該方向走一步后與食物的距離 x = A[sum - 1].x + dx[i];y = A[sum - 1].y + dy[i];distance[i] = abs(foodx-x)+abs(foody-y);} else {//如果不能走則把距離設置為9999 distance[i] = 9999;}}}*/int main() {printf("'w''s''a''d'控制上下左右\n蛇越長跑得越快~~~\n");printf("按任意鍵開始\n");char ch = _getch();system("cls");ini();show();return 0;} 2.智能貪吃蛇

雖然說是智能但是可能并沒有你想象中那么智能==。基本思路是按照上、右、下、左的順序搜索方向,使得沿該方向前進能夠靠近食物,前進過程中遇到障礙會自動繞開,可是不能避免蛇頭被蛇身包圍的情況。

/*蛇越長跑得越快*//*蛇能自己找食物*//*作者:SGAFPZ*/#include #include #include #include //#include #include #include #include void food();void show();void move();void turn();void check();void ini();void calculate();int movable[4] = { 0, 1, 1, 0 };//數組的下標表示方向,0123分別表示上下左右,下同int distance[4] = { 9999, 9999, 9999, 9999 };intdy[4] = { 0, 1, 0, -1 };intdx[4] = { -1, 0, 1, 0 };int sum = 5;//蛇總長度int over = 0;int speed; int foodx, foody;//食物的坐標char map[17][17];struct snake {int x, y;//身體坐標 int dir;//方向(只有蛇頭的方向是有用的) } A[100];void ini() {//初始化界面speed = 500;over = 0;sum = 5;movable[0] = 0; movable[1] = 1; movable[2] = 1; movable[3] = 0;distance[0] = 9999; distance[1] = 9999; distance[2] = 9999; distance[3] = 9999;int i, j;for (i = 0; i < 100; i++) {//初始化蛇頭和蛇身的數據A[i].dir = 0;A[i].x = 0;A[i].y = 0;}A[0].x = 1; A[0].y = 1;//地圖左上角設置一條長度為5的蛇A[1].x = 1; A[1].y = 2;A[2].x = 1; A[2].y = 3;A[3].x = 1; A[3].y = 4;A[4].x = 1; A[4].y = 5; A[4].dir = 1;srand(time(0));for (i = 0; i < 17; i++) {//設置地圖for (j = 0; j < 17; j++) {map[i][j] = '*';}}for (i = 1; i < 16; i++) {for (j = 1; j < 16; j++) {map[i][j] = ' ';}}//map[6][5] = '*'; map[6][6] = '*'; map[6][7] = '*';//map[7][5] = '*'; map[7][7] = '*';map[A[4].x][A[4].y] = 'H';//設置蛇頭for (i = 0; i < sum - 1; i++) {//設置蛇身map[A[i].x][A[i].y] = 'X';}food();calculate();}void show() {//顯示界面 int i, j, x, y;for (i = 0; i < 17; i++) {//顯示界面for (j = 0; j < 17; j++) {printf("%c", map[i][j]);}printf("\n");}while (1) {Sleep(speed);//界面刷新速度turn();move();if (over) {//設置蛇死掉后可以進行的操作 while (1) {char ch = _getch();if (ch == 113) {//輸入‘q’結束 return;}else if (ch == 114) {//輸入‘r’重新開始 ini();break;}}}system("cls");//清屏 for (i = 0; i < 17; i++) {//重新顯示界面for (j = 0; j < 17; j++) {printf("%c", map[i][j]);}printf("\n");}calculate(); //計算并記錄蛇頭與食物距離}}void food() {//生成食物int x, y;while (1) {x = (int)(15 * rand() / (RAND_MAX + 1.0));//隨機產生一組食物坐標y = (int)(15 * rand() / (RAND_MAX + 1.0));if (map[x][y] == ' ') {//如果是空格則在該處生成食物map[x][y] = 'O';foodx = x;//記錄食物坐標 foody = y;break;}}}void move() {//蛇移動int i, x, y;int t = sum;//t記錄當前蛇總長度 check();//移動前檢查按當前方向移動一步后的情況if (t == sum) {//沒有吃到蘋果for (i = 0; i < sum - 1; i++) {if (i == 0) {//蛇尾坐標處變成空格,把蛇尾坐標變成前一個蛇身的坐標 map[A[i].x][A[i].y] = ' ';A[i].x = A[i + 1].x;A[i].y = A[i + 1].y;}else {//每個蛇身坐標都變為它前一個蛇身的坐標A[i].x = A[i + 1].x;A[i].y = A[i + 1].y;}map[A[i].x][A[i].y] = 'X';//把地圖上蛇身坐標處的字符設置成‘X’}A[sum - 1].x = A[sum - 1].x + dx[A[sum - 1].dir];//蛇頭按當前方向移動一格 A[sum - 1].y = A[sum - 1].y + dy[A[sum - 1].dir];map[A[sum - 1].x][A[sum - 1].y] = 'H';//把地圖上蛇頭坐標處的字符設置成‘H’}else {//吃到蘋果(sum會加1)map[A[sum - 2].x][A[sum - 2].y] = 'X';//把地圖上原蛇頭坐標處的字符設置成‘X’A[sum - 1].x = A[sum - 2].x + dx[A[sum - 2].dir];//新蛇頭的坐標是原蛇頭沿當前方向移動一格后的坐標 A[sum - 1].y = A[sum - 2].y + dy[A[sum - 2].dir];A[sum - 1].dir = A[sum - 2].dir;//新蛇頭方向為原蛇頭的方向map[A[sum - 1].x][A[sum - 1].y] = 'H';//把地圖上蛇頭坐標處的字符設置成‘H’food();}for(i = 0; i < 4; i++) {//記錄下能走的方向x = A[sum - 1].x + dx[i];y = A[sum - 1].y + dy[i];if(map[x][y] == ' ' || map[x][y] == 'O') {movable[i] = 1;//能走就把對應方向的值設置為1 } else {if(x != A[0].x || y != A[0].y) {movable[i] = 0;//不能走就把對應方向的值設置為0 } else {movable[i] = 1;}}}}void check() {//檢查是否死亡或者吃到食物int x, y, i, j;x = A[sum - 1].x + dx[A[sum - 1].dir];//記錄按當前方向移動一格后蛇頭的坐標 y = A[sum - 1].y + dy[A[sum - 1].dir];if (map[x][y] == '*' || map[x][y] == 'X') {//如果地圖上該坐標處字符為‘*’或‘X’就死亡 if (x != A[0].x || y != A[0].y) {//蛇尾除外 map[8][4] = 'G'; map[8][5] = 'A'; map[8][6] = 'M'; map[8][7] = 'E';//輸出“GAME OVER” map[8][9] = 'O'; map[8][10] = 'V'; map[8][11] = 'E'; map[8][12] = 'R';map[8][8] = ' ';system("cls");for (i = 0; i < 17; i++) {for (j = 0; j < 17; j++) {printf("%c", map[i][j]);}printf("\n");}printf("Input 'r' to restart\nInput 'q' to quit\n");over = 1;}}else if (map[x][y] == 'O') {//吃到蘋果 sum++;//蛇身總長加1 speed = ((600 - sum * 20)>100) ? (600 - sum * 20) : 100; //速度加快 }}void turn() {//轉彎int i, k = 0;for(i = 1; i < 4; i++) {//找到走一步后離食物距離最短的方向if(distance[k] > distance[i]) {k = i;}}switch (k) {//把把蛇頭方向改為該方向 case 0: A[sum - 1].dir = (A[sum - 1].dir == 2)?2:0; break;case 1: A[sum - 1].dir = (A[sum - 1].dir == 3)?3:1; break;case 2: A[sum - 1].dir = (A[sum - 1].dir == 0)?0:2; break;case 3: A[sum - 1].dir = (A[sum - 1].dir == 1)?1:3; break;}}void calculate() {//計算并記錄蛇頭與食物距離int i = 0, x, y;for(i = 0; i < 4; i++) {if(movable[i] == 1) {//如果該方向能走,則記錄下沿該方向走一步后與食物的距離 x = A[sum - 1].x + dx[i];y = A[sum - 1].y + dy[i];distance[i] = abs(foodx-x)+abs(foody-y);} else {//如果不能走則把距離設置為9999 distance[i] = 9999;}}}int main() {printf("你只需要靜靜地看著它跑\n");printf("按任意鍵開始\n");char ch = _getch();system("cls");ini();show();return 0;}
免責聲明:非本網注明原創的信息,皆為程序自動獲取互聯網,目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,并提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件12小時內刪除。
欧冠竞猜买球官网-欧冠网上买球官网 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>