| 5 | 1/1 | 返回列表 |
| 查看: 1660 | 回復(fù): 7 | ||
| 當(dāng)前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | ||
viking1992新蟲 (初入文壇)
|
[求助]
大二編程廢求助高手解答一下這個貪吃蛇的C++程序
|
|
|
看到一個貪吃蛇的C++程序 中間有幾個地方不懂 求指教! #include #include #include #include #include enum dir{up,down,left,right}; //枚舉類型enum dir; //圍墻; class Fence{ public: void InitFence(); void OutputF(); public: char game[20][20]; }f; //定義對象; //畫框框; void Fence::InitFence(){ for(int i=0; i<20; i++) for(int j=0; j<20; j++){ if(i==0||i==19||j==0||j==19) game[j]= '*'; else game[j]= ' '; } } //顯示框框; void Fence::OutputF(){ for(int i=0; i<20; i++){ for(int j=0; j<20; j++) cout< cout< } //蛇結(jié)點; class SnakeNode{ private: int x,y; SnakeNode *prior,*next; public: void add_head(int x,int y); int get_x(); int get_y(); void delete_tail(); }*head=NULL, *tail =NULL; //插入頭結(jié)點; void SnakeNode::add_head(int x,int y){ SnakeNode *q=new SnakeNode; q->x =x; q->y =y; q->next =head; q->prior =NULL; if(head) head->prior =q; head =q; if(!tail) tail =head; f.game[x][y]= '*'; //f對象可以在定義Fence類時定義; 且Fence類在SnakeNode類前定義; } int SnakeNode::get_x(){ return x; } int SnakeNode::get_y(){ return y; } //刪除尾結(jié)點; void SnakeNode::delete_tail(){ SnakeNode *p =tail; f.game[tail->get_x()][tail->get_y()]= ' ';//把尾結(jié)點的坐標(biāo)表示的'*'置為空格; if(tail==head) tail= head= NULL; else{ tail= tail->prior; tail->next= NULL; } delete p;} //move移動; class move{ public: dir point; //枚舉變量point: 控制方向; int food_x; int food_y; public: void moving(); void change_point(char); //改變方向; void get_food(); }; void move::moving(){ int a,b; a= head->get_x(); //取得頭結(jié)點橫坐標(biāo) b= head->get_y(); //頭結(jié)點縱坐標(biāo) switch(point){ case up: --a; break; case down: ++a; break; case left: --b; break; case right: ++b; break; } if(a==19||b==19||a==0||b==0){ //判斷是否撞墻; cout<<"game over!!!"< } if(a==food_x && b==food_y){ //吃food; head->add_head(a,b); get_food(); } else{ head->add_head(a,b); //插入頭結(jié)點; head->delete_tail(); //刪除尾結(jié)點; } } void move::change_point(char keydown){ switch(keydown){ case 'w': point= up; break; case 's': point= down; break; case 'a': point= left; break; case 'd': point= right; break; } } void move::get_food(){ srand((unsigned int) time(NULL)); //做種子(程序運行時間); food_x= rand()%18+1; food_y= rand()%18+1; f.game[food_x][food_y]= '*';} //main(); int main(){ cout<<"Using 'w,s,a,d'to control direction!!!\n\n\n"; //畫框框和小蛇; move m; f.InitFence(); head->add_head(4,3); head->add_head(4,4); head->add_head(4,5); m.get_food(); f.OutputF(); while (true){ char keydown= getch(); //getch()返回鍵盤上讀取的字符;包含頭文件 m.change_point(keydown); while(!kbhit()){ //判斷有沒有按鍵落下; system("cls" ); //清屏函數(shù) m.moving(); f.OutputF(); Sleep(200); } } return 0; } 問一下紅字部分程序的設(shè)置目的 以及怎么運行和實現(xiàn)的……(簡要的說 就是什么意思= =) 特別是結(jié)點那一塊……動態(tài)數(shù)組和各種指針什么的 看著就頭大……………… 多謝了 [ Last edited by 微塵、夢想 on 2011-8-27 at 20:06 ] |

鐵桿木蟲 (著名寫手)
新蟲 (初入文壇)

鐵桿木蟲 (著名寫手)
|
數(shù)據(jù)結(jié)構(gòu)中的。 1)雙向鏈表插入操作:插入到表頭的處理 q->next =head; //把q對應(yīng)結(jié)點插入到 head位置,即head為q后繼。 q->prior =NULL;//q對應(yīng)結(jié)點是表頭了,對應(yīng)的prior 應(yīng)該為空。 if(head) head->prior =q;//如果已經(jīng)存在頭結(jié)點,要處理原頭結(jié)點,把其前驅(qū)設(shè)置為q結(jié)點 head =q; //q作為新頭結(jié)點 2)刪除操作類似的。 |
新蟲 (初入文壇)

| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿山東大學(xué)藥學(xué)學(xué)碩求調(diào)劑 +3 | 開開心心沒煩惱 2026-03-23 | 4/200 |
|
|---|---|---|---|---|
|
[考研] 求材料,環(huán)境專業(yè)調(diào)劑 +3 | 18567500178 2026-03-18 | 3/150 |
|
|
[考研] 一志愿北京化工大學(xué) 070300 學(xué)碩 336分 求調(diào)劑 +7 | vv迷 2026-03-22 | 7/350 |
|
|
[考研] 384求調(diào)劑 +3 | 子系博 2026-03-22 | 6/300 |
|
|
[考研] 269求調(diào)劑 +4 | 我想讀研11 2026-03-23 | 4/200 |
|
|
[基金申請] 請教下大家 2026年國家基金申請是雙盲審嗎? +3 | lishucheng1 2026-03-22 | 4/200 |
|
|
[考研] 一志愿重慶大學(xué)085700資源與環(huán)境,總分308求調(diào)劑 +7 | 墨墨漠 2026-03-23 | 8/400 |
|
|
[考研] 276求調(diào)劑 +3 | YNRYG 2026-03-21 | 4/200 |
|
|
[考研] 323求調(diào)劑 +6 | 洼小桶 2026-03-18 | 6/300 |
|
|
[考研] 求調(diào)劑 +5 | Zhangbod 2026-03-21 | 7/350 |
|
|
[考研] 一志愿南大,0703化學(xué),分?jǐn)?shù)336,求調(diào)劑 +3 | 收到VS 2026-03-21 | 3/150 |
|
|
[考研] 311求調(diào)劑 +3 | 勇敢的小吳 2026-03-20 | 3/150 |
|
|
[考研] 307求調(diào)劑 +3 | 余意卿 2026-03-18 | 3/150 |
|
|
[考研] 0805材料320求調(diào)劑 +3 | 深海物語 2026-03-20 | 3/150 |
|
|
[考研] 22 350 本科985求調(diào)劑,求老登收留 +3 | 李軼男003 2026-03-20 | 3/150 |
|
|
[考研] 332求調(diào)劑 +3 | 鳳凰院丁真 2026-03-20 | 3/150 |
|
|
[考研] 二本跨考鄭大材料306英一數(shù)二 +3 | z1z2z3879 2026-03-17 | 3/150 |
|
|
[考研] 274求調(diào)劑 +10 | S.H1 2026-03-18 | 10/500 |
|
|
[考研] 考研調(diào)劑求學(xué)校推薦 +3 | 伯樂29 2026-03-18 | 5/250 |
|
|
[考研]
|
簡木ChuFront 2026-03-19 | 8/400 |
|