/*親測devc++編譯器完美執行*/
#define _crt_secure_no_warnings
#include
#include
#include
#include
void readini(file **fphead, int *score, char *argv) //建立或開啟乙個和執行檔案對應的ini檔案,讀取最高紀錄
if (1 == flag)
else
for (; filename[i] != '\\'&&i >= 0; i--)pfilename = &filename[i];
if ((*fphead = fopen(pfilename, "rb+")) == null)
}else
}void writeini(file **fphead, int *score, char *argv) //開啟乙個和執行檔案對應的ini檔案,寫入最高紀錄
if (1 == flag)
else
for (; filename[i] != '\\'&&i >= 0; i--)pfilename = &filename[i];
if ((*fphead = fopen(pfilename, "wb+")) == null)
else
}void gotoxy(int x, int y)//游標定位,游標定位函式setconsolecursorposition是左上角位置是0,0然後向左向下延伸
void color(int a)//顏色函式
void refresh(int q[22], int grade, int gamespeed, int length, int score) // 輸出貪吃蛇棋盤
if (q[i][j] == 1 || q[i][j] == 2)//輸出棋盤牆壁
if (q[i][j] == 3)//輸出蛇頭
if (q[i][j] == 4)//輸出蛇身
if (q[i][j] == 5)//輸出果子
}if (i == 0) printf("\t***********************");
if (i == 1) printf("\t等級為:%d", grade);//顯示等級
if (i == 3) printf("\t自動前進時間");
if (i == 4) printf("\t間隔為:%dms", gamespeed);//顯示時間
if (i == 6) printf("\t歷史最高分為:%d分", score);
if (i == 7) printf("\t你現在得分為:%d分", (length + (grade - 1) * 8) * 10);
if (i == 8) printf("\t**********************");
if (i == 9) printf("\t遊戲說明:");
if (i == 10) printf("\t(1)用小鍵盤方向鍵控制");
if (i == 11) printf("\t蛇頭運動方向;");
if (i == 12) printf("\t(2)蛇每吃乙個果子蛇身");
if (i == 13) printf("\t增加一節;");
if (i == 14) printf("\t(3)蛇咬到自己或碰到牆");
if (i == 15) printf("\t壁遊戲結束。");
if (i == 18) printf("\t**********************");}}
int main(int argc, char *argv)
first = 1;
for (i = 1; i <= 3; i++)
tcsqipan[1][i] = 4; //蛇身
tcsqipan[1][4] = 3; //蛇頭
}srand(time(0));//設定隨機種子
do while (tcsqipan[x1][y1] != 0);//如果不是在空白處重新出果子
tcsqipan[x1][y1] = 5;//貪吃蛇棋盤相應座標標上果子的標誌5
color(12);
printf("\n\n\t\t\t\t貪吃蛇遊戲即將開始 !\n");//準備開始
for (i = 3; i >= 0; i--)
x = tcszuobiao[0][head];
y = tcszuobiao[1][head];//儲存蛇頭座標到x,y變數
while (1)//執行一局遊戲
if (!(direction == 72 || direction == 80 || direction == 75 || direction == 77))
else
if (direction == 72 && directiontemp == 80)//忽略反方向按鍵
else if (direction == 80 && directiontemp == 72)
else if (direction == 75 && directiontemp == 77)
else if (direction == 77 && directiontemp == 75)
switch (direction)//判斷方向鍵
if (x == 0 || x == 21 || y == 0 || y == 21) // 蛇頭碰到牆壁,結束本局遊戲
else
gotoxy(23, 12);
printf("按回車鍵重新開始,按esc退出遊戲\n");//顯示的提示
break;//退出該局遊戲
}if (tcsqipan[x][y] != 0 && !(x == x1&&y == y1) && tcsqipan[x][y] != 3) // 蛇頭碰到蛇身,結束本局遊戲
else
gotoxy(23, 12);
printf("按回車鍵重新開始,按esc退出遊戲\n");//顯示的提示
break;//退出該局遊戲}/*
遊戲執行時的核心演算法開始
*/if (x == x1 && y == y1) // 吃果子,長度加1
tcsqipan[x][y] = 3;//貪吃蛇棋盤相應座標現在蛇頭標誌改為蛇頭標誌3
tcsqipan[tcszuobiao[0][head]][tcszuobiao[1][head]] = 4;//貪吃蛇棋盤相應座標原來蛇頭標誌改為蛇身標誌4
head = (head + 1) % 400;//防止陣列越界
tcszuobiao[0][head] = x;//蛇頭的x座標
tcszuobiao[1][head] = y;//蛇頭的y座標
do//隨機出果子
while (tcsqipan[x1][y1] != 0);//如果不是在空白處重新出果子
tcsqipan[x1][y1] = 5;//貪吃蛇棋盤相應座標標上果子的標誌5
gotoxy(22, 12);
printf("\t遊戲進行中!\n");
refresh(tcsqipan, grade, gamespeed, length, score);
}else // 不吃果子
else}/*
遊戲執行時的核心演算法結束*/}
while (1)
system("cls");//清除螢幕重新開始
}return 0;
}
C語言貪吃蛇
include include include include include include define screen width 40 遊戲螢幕寬度 define screen length 15 遊戲螢幕長度 define start x 16 螢幕起始x座標 define start y ...
C語言 貪吃蛇
include include include define framewidght 22 define frameheight 22 short generaterandnumber short a,short b void posconsolecursor short x,short y voi...
C語言 貪吃蛇
結構體鍊錶,動態分配記憶體,鍵盤輸入檢測,設定游標。1,涉及多個結構體,分別定義蛇,方向,結點,位置座標,遊戲 2,結點串聯形成鍊錶,遍歷獲取成員座標,列印符號得到蛇身。3,不斷的加頭,去尾,重新遍歷座標,再列印形成蛇的移動。4,食物產生的位置判定,不能越界,也不能與蛇身體重合。5,蛇的轉向判定,一...