這裡是乙個c語言/c++專案貪吃蛇的原始碼。
這個原始碼還有待完善,希望大家共同改進。
編譯軟體:vs2013
遊戲的初始介面是這樣子的
思路:首先將程式目的大致分為幾個步驟來實現:
1、顯示背景圖,蛇,食物
2、讓蛇隨著玩家鍵入的方向鍵移動
3、若蛇吃到食物則加長一節
以下是實現的**,若有不對的地方歡迎指正。
#include
#include
//包含easyx圖形庫,可以使用給我們提供的一些函式,繪圖,貼圖
#include
#define win_width 640
#define win_height 480
#define max_snake 500 //蛇的最大節數
//列舉
enum dir //列舉蛇的方向
up,down,
left,
right,
struct food //食物
int x;
int y;
dword color;
bool flag;//是否被吃掉,是否要重新生成食物
}food;
struct pos
int x;
int y;
dword color;
struct snake//蛇的結構體
int num;//當前節數
int dir;//蛇的方向
int score;//分數
int size;//蛇的寬和高
int speed;//蛇的移動速度
//表示每一節蛇的座標 陣列
struct pos coor[max_snake];
}snake;
void gameinit()
//設定隨機數種子
srand(gettickcount());
snake.num = 3;
snake.dir = right;
snake.score = 0;
snake.size = 10;
snake.speed = 10;
snake.coor[2].x = 0;
snake.coor[2].y = 0;
snake.coor[2].color = rgb(rand() % 256, rand() % 256, rand() % 256);//隨機生成三個數,用三原色表示顏色
snake.coor[1].x = 10;
snake.coor[1].y = 0;
snake.coor[1].color = rgb(rand() % 256, rand() % 256, rand() % 256);//隨機生成三個數,用三原色表示顏色
snake.coor[0].x = 20;
snake.coor[0].y = 0;
snake.coor[0].color = rgb(rand() % 256, rand() % 256, rand() % 256);//隨機生成三個數,用三原色表示顏色
//初始化食物
food.x = rand() % (win_width/10)*10;//1*10 10 20 30 40 50 60
food.y = rand() % (win_height/10)*10;
food.color = rgb(rand() % 256, rand() % 256, rand() % 256);//隨機生成三個數,用三原色表示顏色
food.flag = true;
void gamedraw()
cleardevice();
for (int i = 0; i < snake.num; i++)
//設定填充顏色
setfillcolor(snake.coor[i].color);
//畫矩形
fillrectangle(snake.coor[i].x, snake.coor[i].y, snake.coor[i].x + 10, snake.coor[i].y + 10);
//繪製食物
//solidcircle(food.x,food.y,5)
if (food.flag)
setfillcolor(food.color);
solidellipse(food.x, food.y, food.x + 10, food.y + 10);
//繪製分數
//先把整數轉成字串
char temp[20] = " ";
sprintf(temp, "分數:%d", snake.score);
outtextxy(10,10,temp);//如果報錯 「outtextxy」: 2 個過載中沒有乙個可以轉換所有引數型別 一定是字符集問題
/*怎麼修改字符集呢?三種方法
void gamemove()
for (int i = snake.num-1; i >0; i--)
snake.coor[i].x = snake.coor[i - 1].x;
snake.coor[i].y = snake.coor[i - 1].y;
switch(snake.dir)
case up:
snake.coor[0].y -= snake.speed;
if (snake.coor[0].y < 0)
snake.coor[0].y = win_height;
break;
case down:
snake.coor[0].y += snake.speed;
if (snake.coor[0].y > win_height)
snake.coor[0].y = 0;
break;
case left:
snake.coor[0].x -= snake.speed;
if (snake.coor[0].x < 0)
snake.coor[0].x = win_width;
break;
case right:
snake.coor[0].x += snake.speed;
if (snake.coor[0].x > win_width)
snake.coor[0].x = 0;
break;
void gamecontrol()
//獲取鍵盤輸入,_getch(); 不回顯函式,
char key = _getch();
switch (key)
case 72:
if (snake.dir!=down)
snake.dir = up;
break;
case 80:
if (snake.dir != up)
snake.dir = down;
break;
case 75:
if (snake.dir != right)
snake.dir = left;
break;
case 77:
if (snake.dir != left)
snake.dir = right;
break;
printf("%d", key);
void createfood()
if (!food.flag)
food.x = rand() % (win_width / 10) * 10;//1*10 10 20 30 40 50 60
food.y = rand() % (win_height / 10) * 10;
food.color = rgb(rand() % 256, rand() % 256, rand() % 256);//隨機生成三個數,用三原色表示顏色
food.flag = true;
void eatfood()
if (food.flag && snake.coor[0].x == food.x && snake.coor[0].y == food.y)
food.flag = false;
snake.num++;
snake.score += 10;
snake.coor[snake.num-1].color = rgb(rand() % 256, rand() % 256, rand() % 256);//隨機生成三個數,用三原色表示顏色
createfood();++
int main()
//1,建立視窗,init初始化 graphics 圖形視窗
initgraph(win_width, win_height, showconsole);
setbkcolor(rgb(207, 214, 229));//設定顏色
cleardevice();//重新整理視窗
gameinit();
while (1)
gamedraw();
gamemove();
if (_kbhit())
gamecontrol();
eatfood();
sleep(100);
getchar();
return 0;
這個蛇的移動按照鍵盤上的上下左右控制蛇的運動方向,然後希望這個**能對大家有點幫助。
c語言 rand C語言隨機數
編寫程式過程中,我們經常需要產生一些隨機數。隨機數在程式中分為兩種 1.真隨機數 完全沒有規則,無法 接下來要產生的數。2.偽隨機數 通過一些預先設定好的規則產生不能簡單 的數。偽隨機數在c語言中產生分為兩個步驟 1.設定隨機數種子。2.獲得隨機數。設定隨機數種子和獲得隨機數,我們需要使用兩個函式。...
C語言小程式分享
define myhead h 標頭檔案內容 endif 二 print 是什麼?print 是我在print.h中定義的乙個將內容輸出到螢幕函式,沒有過多意義,用作顯示一些重複的提示語之用。三 setcolor 是什麼?setcolor是window.h下的乙個函式,用作改變ide的背景色和前景色...
C語言專案總結
歷時14天的專案與答辯總算是完成了。相比於第一次做專案,這一次專案,我用心很多,第一次做html的專案,平心而論的講,做的確實差,沒有用心,完全是敷衍了事,沒把他當一回事,完全是把他當作完成任務,答辯的時候也是洋相百出,沒有達到老師的要求,所以也算是丟盡了臉面,所以當時就決定,以後的專案一定要認真做...