Win下控制台簡單貪吃蛇實現

2021-10-09 22:36:43 字數 3819 閱讀 1240

貪吃蛇

???算是對大一課設的交代》,**抄過來的

vs2020下編譯,僅使用sleep()和system(「cls」),_kbhit(),等幾個win api

結構: ------ main.c global.c global.h

主要思路:2維陣列每個點分別存牆(1),空地(0),蛇身體(2),食物點(3).然後遍歷2維陣列printf繪圖

蛇身體長度通過int* body指標陣列指向對應地圖點,

main.c

//#define _winsock_deprecated_no_warnings 

#include

"global.h"

extern

int overflag;

intmain

(int argc,

char

*ar**)

//startview(); /*遊戲開始前的動畫*/

startgame()

;printf

("game over!!!\n 按下任意鍵結束 \n");

_getch()

; overflag =1;

system

("cls");

}return0;

}

global.c

#include

"global.h"

/*全域性變數

*/int speed =30;

/*蛇的移動速度*/

int maparr[maxx]

[maxy]

;/*座標處的內容*/

int inputx =

50, inputy =20;

/*預設遊戲的介面寬度和高度*/

int randx =-1

, randy =-1

;/*隨機生成食物座標值*/

int foodflag =0;

/*判斷是否更新食物*/

int sx =

1, sy =1;

/*設定蛇身座標值*/

int l =0;

/*蛇身長度*/

int* body[maxx * maxy]

;/*儲存蛇身體的陣列*/

char input;

/*預設移動方向*/

int overflag =1;

/*遊戲介紹標誌:撞牆or吃到自己*/

int movex =

1,movey =1;

/*遊戲開始的動畫座標值*/

int moveflag =0;

/*動畫的迴圈判斷*/

/*地圖初始化*/

void

initmap()

else}}

return;}

/*遊戲介面設定*/

void

getset()

/*遊戲開始前的動畫??*/

void

startview()

}}void

judgeend()

}//恢復動畫前的效果

movex =

1, movey =1;

initmap()

; moveflag =0;

out:

return;}

/*列印每個座標處的值對應的圖示*/

void

printmap()

}printf

("\n");

}}/*數字動畫,效果看下面注釋*/

void

setmovenum()

// y從上到下 , 此時在最右邊

elseif(

(movex == inputx -

2- moveflag)

&&(movey < inputy -

2- moveflag)

)// x從右到左, 此時在最下面

elseif(

(movey == inputy -

2- moveflag)

&&(movex >

1+ moveflag)

)// y從下到上, 此時在最左邊

elseif(

(movex ==

1+ moveflag)

&&(movey >

1+ moveflag))}

}//遊戲開始

void

startgame()

while

(overflag)

}void

startmsg()

//處理蛇是否吃了食物

void

eatfood()

}//設定食物出現位置

void

setrandnum()

maparr[randx +1]

[randy +1]

=3; foodflag =1;

//生成成功

}void

setsnakenum()

break

;//上乙個方向是向下,那麼這裡只能向左和右

case

's':

if(a ==

'a'|| a ==

'd')

break

;//上乙個方向向左,那麼這裡只能向上和下

case

'a':

if(a ==

'w'|| a ==

's')

break

;//上乙個方向向右,那麼這裡只能向上和下

case

'd':

if(a ==

'w'|| a ==

's')

break;}

}//input是剛剛從上面(輸入)拿到新的有效方向

switch

(input)

//為什麼吃了食物,沒有立即邊長,因為我們增加了l,在這裡進行對地圖賦值=2,等價於增長,

for(

int i = l; i!=

0; i--

)//移動蛇的身體(上面去掉乙個,然後新增乙個開頭處,

body[0]

=&maparr[sx]

[sy];if

((*body[0]

==1)||

(*body[0]

==2))

//判斷是否撞牆》

overflag =0;

*body[0]

=2;//第一次l = 0,但是這裡給賦值了

}

global.h

#pragma once

#include

#include

#include

#include

#include

#define maxx 10000

#define maxy 10000

void

initmap()

;void

getset()

;void

startview()

;void

setmovenum()

;void

printmap()

;void

judgeend()

;void

startgame()

;void

setsnakenum()

;void

setrandnum()

;void

eatfood()

;void

startmsg()

;

貪吃蛇 控制台

本文把遊戲區域就行編號,第一行從0到width 1,到height 1 到 width height 1 二維陣列 並用trace len 陣列儲存snake移動的軌跡 儲存的是數值,數值就能表現出所在的行和列 trace 0 始終為snake的頭部 根據display 函式繪圖,延時,在繪圖,達到...

Golang 實現控制台貪吃蛇

package main import fmt math rand os time include include 使用了winapi來移動控制台的游標 void gotoxy int x,int y 從鍵盤獲取一次按鍵,但不顯示到控制台 int direct import c go中可以嵌入c語言...

c 控制台實現貪吃蛇

思路 效果 沒開發前覺得挺難,一步步做下來後就不覺得難了,當然,只是粗略的實現,速度,地圖自定義等都可以再繼續優化,規劃也不好。貪吃蛇包含 牆,食物,蛇。牆 初始後固定動,直接按橫0縱0,高寬自定列印字元即可。食物 x,y生成在牆內。蛇 會動,實際會動的只有蛇頭和蛇尾,蛇身每個字元都會經過蛇頭的位置...