蛇的初始化實際就是二維陣列的初始化,該二維陣列儲存兩個值,裡面包含該蛇身體的座標資訊,他出現的初始位置是模擬座標的中間位置。
蛇的移動是通過改變二維陣列座標來實現的,例如當蛇向右前進乙個單位,則將尾每乙個身體位置的座標更改,同時改變舌頭、蛇身以及蛇尾的方向。這樣整體來看蛇就前進了乙個單位。
當蛇吃了正常食物後,蛇的長度會增加,增加蛇的長度就是在食物的位置增加乙個二維陣列並且將這個位置變為蛇頭。
當蛇撞上障礙物、自身或者通關時,蛇死亡就是二維陣列的銷毀,
食物出現的位置上都是隨機的,這些因素由通過隨機函式獲取的隨機數決定,食物的位置不能出現在障礙物和邊界上。
通過獲取鍵盤輸入的w(上)、s(下)、a(左)、d(右)來改變模組中的移動方向,從而影響蛇的移動方向。
snake.c
#define _crt_secure_no_warnings
#include
#include
#include
#include
#include
#include
#include
#include
"snake.h"
/*1.定義蛇的結構體
2.初始化蛇和食物
3.開始遊戲
蛇和牆的碰撞
蛇和自身碰撞
蛇和食物碰撞
重新隨機食物
蛇身體增長
分數增長
方向鍵控制
4.遊戲結束
*/void
initfood()
void
initsnake()
void
showui()
//顯示食物位置
coord.x = food[0]
; coord.y = food[1]
;setconsolecursorposition
(getstdhandle
(std_output_handle)
, coord)
;putchar
('#');
}}void
playgame()
//方向控制按鈕
switch
(key)
//是否和自身碰撞
for(
int i =
1; i < snake.size; i++)}
//蛇和食物的碰撞
if(snake.body[0]
.x == food[0]
&& snake.body[0]
.y == food[1]
)//蛇更新座標
lx = snake.body[snake.size -1]
.x; ly = snake.body[snake.size -1]
.y;for
(int i = snake.size -
1; i >
0; i--
)//更新舌頭
snake.body[0]
.x +
= dx;
snake.body[0]
.y +
= dy;
sleep
(100);
//system("cls");}}
//加框架牆
void
initwall()
putchar
('\n');
}}intmain()
snake.h
#pragma once
#define wide 60
#define high 20
struct body
;struct snake
snake;
int food[2]
=;//food[0]為x座標 food[1]為y座標
int score =0;
//偏移座標
int dx =0;
int dy =0;
//記錄蛇末尾座標
int lx =0;
int ly =0;
void
initfood()
;void
initsnake()
;void
showui()
;void
playgame()
;void
initwall()
;
C語言 貪吃蛇遊戲
相信每個人都接觸過貪吃蛇遊戲,而對於學習c語言的同學來說,一開始是不是覺得c語言寫不出什麼東西來呢?那麼,貪吃蛇應該是第一步,開始了解一些模組化的知識,一些物件導向的思想,一些小專案的編寫。效果 通過 wasd 移動蛇,蛇能夠吃隨機產生的食物,並且變長。基本實現 用兩個陣列snakex,snakey...
C語言 貪吃蛇遊戲
該遊戲不依賴tc環境,任何第三方庫,可以在vc 6.0 vs c free等常見ide中編譯通過。設計貪吃蛇遊戲的主要目的是讓大家夯實c語言基礎,訓練程式設計思維,培養解決問題的思路,領略多姿多彩的c語言。遊戲開始後,會在中間位置出現一條只有三個節點的貪吃蛇,並隨機出現乙個食物,如下圖所示 圖1 遊...
C語言 貪吃蛇遊戲
需要注意的是,在函式命名的時候要注意清晰明了,還有就是注意模組的劃分要清晰,該是哪個模組的任務就由哪個模組去做,不要混亂結果,打個比方,如蛇身的繪畫,可以是snake模組的任務,但是在實際設計上,繪畫並不是蛇本身的屬性,他應該是view模組的任務,這樣這是為了保證資料和操作相互隔離,分工明確。所以在...