剛學完了c語言,便嘗試的寫了貪吃蛇的**,但是效果不佳,很多的bug,所以,這個學了c++,便重新的寫了這個小遊戲,用類來封裝!
先是標頭檔案:
struct snake
;class snake
~snake(){}
void display(); //顯示蛇身函式
void rightmove(); //右移函式
void leftmove(); //左移函式
void upmove(); //上移函式
void downmove(); //下移函式
int cheak(); //檢查是否撞牆或撞到自身
void creat_food(); //產生食物
int eat_food(); //吃食物
private:
struct snake s[100]; //先定義蛇身最長100
int length; //當前蛇長度
int x3, y3; //食物座標
int up, down, right, left; //蛇的狀態,是上移還是下移或...};
void make_frame(); //列印框架的函式
void show(); //遊戲開始倒計時函式
void gameover(); //遊戲結束函式
下面是各個函式的實現的cpp檔案:
# include
# include
# include
# include "snake.h"
# define maxlen 20
# define maxwen 30
using namespace std;
handle hout = getstdhandle(std_output_handle); //獲取控制代碼
void gotoxy(handle hout, int x, int y) //輸出位置的函式
void snake::display() //列印蛇身
else //列印蛇身 }
gotoxy(hout, 0, 22);
}void snake::rightmove() //右移
gotoxy(hout, x2, y2); //消除蛇移動遺留的 『*'
cout << ' ';
}void snake::leftmove() //左移
gotoxy(hout, x2, y2); //同上
cout << ' ';
}void snake::downmove() //下移
gotoxy(hout, x2, y2); //同上
cout << ' ';
}void snake::upmove() //上移
gotoxy(hout, x2, y2); //同上
cout << ' ';
}int snake::cheak()
} if (flag == 1 || (s[length - 1].x >= 30 + 1 || s[length - 1].x < 4) || (s[length - 1].y <= 1 || s[length - 1].y >= 20))
else }
void snake::creat_food() //產生食物座標
gotoxy(hout, x3, y3); //顯示食物
cout << '*';
}int snake::eat_food()
else if (down == 1) //同上
else if (right == 1) //同上
else if (left == 1) //同上
length++; //蛇長加1
return 1;
} else
return 0;
}void make_frame() //列印框架函式
for (int i = 2; i < maxlen; i++)
gotoxy(hout, 2 + maxwen, 1);
printf("╗");
for (int i = 2; i < maxlen; i++)
gotoxy(hout, 2, maxlen);
printf("╚");
gotoxy(hout, 2 + maxwen, maxlen);
printf("╝");
for (int i = 4; i < 2 + maxwen; i++) }
void show() //顯示操作方法和遊戲開始倒計時
void gameover() //遊戲結束函式
主函式的cpp檔案:
# include
# include
# include
# include "snake.h"
using namespace std;
char ch;
int main()
sleep(500); //等待500ms
p: if (_kbhit()) //是否有按鍵 }
pp: switch (ch) //有按鍵
sleep(500);
pw: if (_kbhit()) }
}break;
case 97: //左移的情況
sleep(500);
pa: if (_kbhit())
}}break;
case 115: //下移的情況
sleep(500);
ps: i程式設計客棧f (_kbhit()) }
}break;
case 100: //右移的情況
sleep(500);
pd: if (_kbhit())
}}break;
default:
break;
} gameover(); //顯示遊戲結束,是否重玩
py: ch = _getch();
if (ch == 110) //否
else if (ch == 121) //是
continue;
else
goto py;
} return 0;
}下面是遊戲的截圖:
控制台的實現,不是很美觀,主要是由於上下和左右的間隙不一樣大,所以看起來不是很好看,但總體還是實現了貪吃蛇!
關於c++小遊戲的內容專題: 《c++經典小遊戲》 學習了解
本文標題: c++控制台實現貪吃蛇遊戲
本文位址:
c 控制台實現貪吃蛇
思路 效果 沒開發前覺得挺難,一步步做下來後就不覺得難了,當然,只是粗略的實現,速度,地圖自定義等都可以再繼續優化,規劃也不好。貪吃蛇包含 牆,食物,蛇。牆 初始後固定動,直接按橫0縱0,高寬自定列印字元即可。食物 x,y生成在牆內。蛇 會動,實際會動的只有蛇頭和蛇尾,蛇身每個字元都會經過蛇頭的位置...
C 控制台貪吃蛇
軟體實訓作品,現放出個人源 供需要的同學參考 int startx 8 x起點 const int starty 4 y起點 const int rangex 60 x範圍 const int rangey 20 y範圍 const int endx startx rangex x終點 const ...
C 控制台貪吃蛇
大二下的遊戲程式設計第乙個小作業,以此篇記錄一下,感謝李仕老師的循循善誘和同學們的熱情討論。include include include using namespace std define leftborder 3 define topborder 3 bool gameover,died 遊戲...