c語言 rand C語言 C 專案分享 貪吃蛇

2021-10-13 18:13:13 字數 4687 閱讀 2663

這裡是乙個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的專案,平心而論的講,做的確實差,沒有用心,完全是敷衍了事,沒把他當一回事,完全是把他當作完成任務,答辯的時候也是洋相百出,沒有達到老師的要求,所以也算是丟盡了臉面,所以當時就決定,以後的專案一定要認真做...