第一篇:貪吃蛇游戲 實習報告
課程設計報告
貪吃蛇游戲設計
專業 電子信息工程 杜 運 福 B電子062 0610620224 曹 妍 2008年8月30日 學生姓名 班學級 號
指導教師 完成日期
鹽城工學院本科生課程設計報告(2008)
貪吃蛇游戲設計 摘要:本設計主要圍繞貪吃蛇游戲展開。眾所周知,貪吃蛇游戲一直以來是比較流行的。傳統的貪吃蛇游戲功能比較少,對蛇的控制僅限于向左轉和向右轉,而現在的貪吃蛇游戲已經發展的相當好;具有更多的功能和友好的界面。例如,最近流行的免費的3D版的貪吃蛇游戲,界面相當的美觀,有很強的立體效果,真實感更強,食物也為立體的且顏色絢麗。在3D版貪吃蛇游戲里面,墻壁是真實的墻壁,障礙物比較多,如樹、土丘等。此外,其功能更多更強,可以選擇難度。不過,總而言之,3D版與傳統的貪吃蛇游戲有共性,即娛樂性與益智性。這些也是貪吃蛇游戲的優點。本人因水平有限,只能設計簡單的貪吃蛇游戲。不過,在功能上,比傳統貪吃蛇游戲更豐富。蛇可以反向運動,操作起來,顯得更為靈活。界面的顏色選用綠色,不易使眼睛疲勞。關鍵詞:3D版;傳統;靈活; 2
貪吃蛇游戲設計
目錄
1、概述
1.1、用TC設計程序的方法 1.2、簡要說明
2、設計要求
3、系統分析與模塊設計 3.1、算法設計 3.2、數據結構 3.3、模塊設計 3.4、模塊枝干圖
4、程序流程圖 4.1、圖形驅動 4.2、開始畫面 4.3、顯示食物 4.4、蛇向前移動 4.5、判蛇死
4.6、吃到食物后處理 4.7、判蛇反向移動 4.8、游戲結束 4.9、圖形結束
5、程序設計及關鍵源代碼
6、運行結果分析
7、實習心得
鹽城工學院本科生課程設計報告(2008)
貪吃蛇游戲的設計 1.概 述 1.1、用TC設計程序的方法
首先應了解設計要求,然后按照功能設計模塊,每個模塊完成特定的功能,要使模塊間的耦合性小,內聚性高;設計模塊是相當重要的一個環節。模塊的數量不宜太多,也不宜太少,要使每個模塊都能比較簡單的轉換成流程圖。模塊設計完成后,就該給每個模塊繪制流程圖了。流程圖要簡單,容易理解,多用中文。不宜寫過長的代碼,增加理解難度。流程圖與模塊枝干圖均可用繪圖軟件繪制,可適當加些背景色,用以區分。此外,流程圖應容易轉換成代碼。繪制好了流程圖,就要編寫代碼了。直接在TC環境里輸入代碼,然后運行測試,檢查錯誤,最終,將設計出可行的程序。1.2、簡要說明
我設計的貪吃蛇游戲具有很多獨特性。例如,墻壁不用實體,而用中空的墻,顏色為綠色,顯得更美觀,且不易使眼疲勞。操作上,做了些簡化,游戲開始時便可以自動運行,且速度較快,屬中等難度。玩游戲的過程相當簡單,只需按鍵盤上的上下左右方向鍵,便可改變蛇的行進方向。食物隨機產生。貪吃蛇吃到一個食物后便得到10分。得分顯示在左上角。當蛇撞到墻壁或自己時,蛇死,游戲結束,輸出得分。
2.設計要求
外觀為矩形,食物隨機產生,添加注釋,統計得分、每吃到一個食物獲得10分。蛇碰到自己或墻壁,游戲均結束。游戲結束時輸出得分。畫出模塊枝干圖與每個模塊的程序流程圖。修改某些代碼,改變其外觀及功能。游戲操作應盡量簡單。
界面美觀,讓人看了覺得舒服。
3、系統分析與模塊設計 3.1、算法設計
玩游戲過程采用遞歸算法,由WHILE(1)控制循環過程,可使游戲重復玩,在蛇死之前不停的玩。判斷蛇死的算法是通過判斷蛇有沒有碰到自己及墻壁。使蛇向前移動采用遞歸算法,通過遞歸將蛇的每一節依次向前移動,橫坐標與縱坐標依次向前賦值,從而達到使蛇前移的目的。蛇的前進方向通過IF結構判斷。
貪吃蛇游戲設計
3.2、數據結構
蛇與食物信息分別用兩個結構體存儲與表示。將食物的橫坐標X、縱坐標Y和判斷是否要出現食物的變量YES分別作為食物的結構體的成員。蛇的橫坐標數組X[N],縱坐標數組Y[N],蛇的節數NODE,蛇的移動方向DIRECTION、蛇的生命LIFE分別作為蛇的結構體的成員。結構體內每個成員的存儲類型均為整型。3.3、模塊設計
模塊應具有高內聚性,低耦合性。這樣,程序運行才更穩定,效率更高。據功能將貪吃蛇游戲劃分成四個大模塊,九個小模塊。每個模塊均具有自己的功能,而且,比較容易畫出各個模塊的流程圖。3.4、模塊枝干圖
簡要說明:圖形驅動即完成初始化圖形系統功能;開始畫面模塊的主要作用是根據設置繪制出玩游戲區域四周的墻壁;玩游戲的過程是游戲此游戲程序的核心,又可細分為好多小的功能模塊;其中,顯示食物模塊僅完成顯示食物功能;蛇前移模塊即通過遞歸算法實現蛇的向某方向移動;判蛇死模塊的功能是通過判斷蛇是否碰到自己或墻壁來判斷蛇有沒有死亡。吃到食物后小模塊只有蛇吃到食物后才起作用。即當蛇吃到食物后,蛇自身延長一節并繪出蛇,同時加10分。通過鍵盤操控來玩游戲主要由判反向移動模塊完成,即當蛇不是反向移動時,按照鍵盤上方向鍵指示移動。游戲結束模塊功能簡單,僅完成輸出得分與提示語功能。最后圖形結束模塊完成關閉圖形功能。
4、程序流程圖
4.1、圖形驅動
鹽城工學院本科生課程設計報告(2008)
4.2、開始畫面
貪吃蛇游戲設計
4.3、顯示食物
鹽城工學院本科生課程設計報告(2008)
4.、蛇向前移動
貪吃蛇游戲設計
4.5、判蛇死
鹽城工學院本科生課程設計報告(2008)
4.6
、吃到食物后處理
貪吃蛇游戲設計
4.7、判蛇反向移動
鹽城工學院本科生課程設計報告(2008)
4.8、游戲結束
貪吃蛇游戲設計
4.9、圖形結束
5、程序設計及關鍵源代碼
定義上下左右控制方向:
#define LEFT 0x4b00 #define RIGHT 0x4d00
鹽城工學院本科生課程設計報告(2008)
#define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b
設定游戲速度:
int gamespeed=60000;
用結構體定義食物與蛇:
struct Food { int x;/*食物的橫坐標*/ int y;/*食物的縱坐標*/ int yes;/*判斷是否要出現食物的變量*/ }food;/*食物的結構體*/ struct Snake { int x[N];int y[N];int node;/*蛇的節數*/ int direction;/*蛇移動方向*/ int life;/* 蛇的生命,0活著,1死亡*/ }snake;主函數:
void main(void){ Init();/*圖形驅動*/ DrawK();/*開始畫面*/ GamePlay();/*玩游戲具體過程*/ Close();/*圖形結束*/ } 圖形驅動:
貪吃蛇游戲設計
void Init(void){ int gd=DETECT,gm;initgraph(&gd,&gm,“c: c”);cleardevice();}
開始畫面,左上角坐標為(50,40),右下角坐標為(620,460)的圍墻:
void DrawK(void){ setcolor(10);/*綠色*/ setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/ for(i=50;i<=610;i+=10)/*畫圍墻*/ { rectangle(i,40,i+10,49);/*上邊*/ rectangle(i,451,i+10,460);/*下邊*/ } for(i=40;i<=450;i+=10){ rectangle(50,i,59,i+10);/*左邊*/ rectangle(611,i,620,i+10);/*右邊*/ } }
玩游戲具體過程:
void GamePlay(void){ randomize();/*隨機數發生器*/ food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/ snake.life=0;/*活著*/ snake.direction=1;/*方向往右*/ snake.x[0]=100;snake.y[0]=100;/*蛇頭*/ snake.x[1]=110;snake.y[1]=100;
鹽城工學院本科生課程設計報告(2008)
snake.node=2;/*節數*/ PrScore();/*輸出得分*/ while(1)/*可以重復玩游戲,壓ESC鍵結束*/ { while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/ { if(food.yes==1)/*需要出現新食物*/ { food.x=rand()%400+60;food.y=rand()%350+60;while(food.x%10!=0)/*使食物在整格內*/ food.x++;while(food.y%10!=0)food.y++;food.yes=0;/*畫面上有食物了*/ } if(food.yes==0)/*畫面上有食物了就要顯示*/ { setcolor(BROWN);rectangle(food.x,food.y,food.x+10,food.y-10);} for(i=snake.node-1;i>0;i--)/*蛇的每個環節前移動,關鍵算法*/ { snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];} /*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/ switch(snake.direction){ case 1:snake.x[0]+=10;break;case 2: snake.x[0]-=10;break;case 3: snake.y[0]-=10;break;case 4: snake.y[0]+=10;break;} for(i=3;i 貪吃蛇游戲設計 { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){ GameOver();/*顯示失敗*/ snake.life=1;break;} } if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55|| snake.y[0]>455){ GameOver();snake.life=1;/*蛇死*/ } if(snake.life==1)/*以上兩種判斷以后,如果蛇死就跳出內循環,重新開始*/ break;if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ { setcolor(0);/*把畫面上的食物東西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*新的一節先放在看不見的位置,下次循環就取前一節的位置*/ snake.node++;/*蛇的身體長一節*/ food.yes=1;/*畫面上需要出現新的食物*/ score+=10;PrScore();/*輸出新得分*/ } setcolor(4);/*畫出蛇*/ for(i=0;i 鹽城工學院本科生課程設計報告(2008) } /*endwhile(!kbhit)*/ if(snake.life==1)/*如果蛇死就跳出循環*/ break;key=bioskey(0);/*接收按鍵*/ if(key==ESC)/*按ESC鍵退出*/ break;else if(key==UP&&snake.direction!=4)/*判斷是否往相反的方向移動*/ snake.direction=3;else if(key==RIGHT&&snake.direction!=2)snake.direction=1;else if(key==LEFT&&snake.direction!=1)snake.direction=2;else if(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(1)*/ } 游戲結束: void GameOver(void){ cleardevice();PrScore();setcolor(GREEN);settextstyle(0,0,3);outtextxy(200,200,“ Game over!Try!”);getch();} 輸出成績: void PrScore(void){ char str[10]; 貪吃蛇游戲設計 setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(5);settextstyle(0,0,2);sprintf(str,“score:%d”,score);outtextxy(55,20,str);} 6、運行結果分析 通過運行,我對自己的設計比較滿意。運行結果正如我所料,此貪吃蛇游戲具有易操作性及充滿活力的外觀。 截圖及描述: 圖6-1 開始畫面 此圖為開始畫面圖,蛇有三節,墻壁顏色為綠色,顯得較有活力。 鹽城工學院本科生課程設計報告(2008) 圖6-2 蛇吃到兩個食物后 蛇吃到食物后,得分為20分,蛇延長兩節。 圖6-3 游戲結束畫面 貪吃蛇游戲設計 7、實習心得 在大一學習期間,我就知道在大二暑假期間,有程序設計實習。從那時起,我就期盼著這一天早點到來。只因我對編程有濃厚的興趣。我是我們班第一個通過江蘇省計算機VB二級考試的。我的VC++成績也還可以。 轉眼間,程序設計實習就如期而至了。實習的第一天是充滿好奇與興趣,當實習回來時,就感覺得這次實習并非想象中的那樣。我本以為,程序設計實習應該是開放性的,讓我們參照某些課題,自主、自由地設計程序。我想,那樣更能促進我們學習和提高我們的動手能力。 這次實習中,我們都被給了程序的源碼,而且有詳細的功能說明。表面上看,我們幾乎不需什么努力就能完成,而實際上,并非如此。因為那些程序大多是基于16位DOS執行的,并且,里面包含許多DOS下圖形處理的函數,我從未涉及過,所以,很難看懂代碼,即使有那樣詳細的注釋。 通過堅持上機實習,我對代碼的認識越來越多。我還上網找了些資料,如TC函數詳解等等。我更多的了解了各種TC函數的功能。我通過一步步的學習,終于弄懂了整個程序,并且對程序做了些修改。如外觀、大小、輸出成績等。通過修改程序代碼增加游戲的功能,我也從中獲得了自信。 通過使用Win-TC1.9設計程序,我更多的了解了TC函數的功能與用法,也了解了在TC環境下調用DOS繪圖及處理的常用方法。 在上機實習的過程中,還繪制了模塊枝干圖與程序流程圖,我感覺到,畫模塊枝干圖并不是件容易的事。只有在弄懂程序后才能將整個程序劃分成數量適宜的模塊。劃分模塊確實挺重要的,原來我將玩游戲過程劃為一個模塊,后來發現太復雜,很難畫出流程圖。模塊的數量直接關系到繪制程序流程圖的難度。從中,我更深入了解了程序設計的整個過程,這也是我最受益的地方。 在實習過程中,遇到不懂的問題,時而查閱以前學過的書籍,也等于我做了復習。這也能提高我將理論付諸實踐的能力。 此外,實習期間,你將我們劃分成小組;這促進了我們的相互合作與相互學習。總之,通過這次實習,我學到了好多書本以外的知識!我同樣很感謝老師,您! 參考文獻 [1] 張岳新《Visual C++程序設計》。 [2] 張岳新《Visual C++程序設計基礎實驗指導書》。[3]沈被娜 劉祖照 《計算機軟件技術基礎》 一場好玩的“貪吃蛇”游戲作文 今天下午,我們在百思特門口進行了一個小比賽—貪吃蛇。 人員到齊以后,老師按照報數的順序分好了小組,單數為一組,雙數為二祖。老師說完比賽規則后,比賽開始了。兩名同學快步走到紙箱前,選好氣球,跑回下一個同學那里。接著第二個、第三個、第四個……直到全組都拿到氣球。激烈的比拼后,老師說:“第一名和第二名已知曉,二組獲得了第一,接下來,還有一個把氣球放回去的游戲。” 放氣球游戲開始了,我們排成一條小蛇,把氣球慢慢地放回箱子。開始時我們放錯了,看著二組一個有一個的將氣球放進箱子里,我們著急地說:“快點!”排頭也著急的快步起來。 到張博文了,他把球一放,那球好像在幫我們贏一樣,張博文放一下,它就被彈出來,連放了三次,都被彈出來了,最后他把氣球輕輕一放才放好,就在他剛放完,我們已經反敗為勝了。 比賽結束了,我們勝利了,我明白了一個道理,團結的力量是無限強大的。 [一場好玩的“貪吃蛇”游戲作文]相關文章: import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Snake extends JFrame { private JPanel contentPane;//窗體內容網格 private JButton btnStart = new JButton(“開始”);//游戲開始按鈕 private JButton btnPause = new JButton(“暫停”);//游戲暫停按鈕 private JButton btnExit = new JButton(“退出”);//游戲退出按 private JPanel pnlTop = new JPanel();//頂部按鈕和分數面板 private JPanel pnlLeft = new JPanel();//左側面板 private JPanel playPanel = new JPanel();//游戲區面板 private BorderLayout borderLayout1 = new BorderLayout();//容器布局管理器 private BorderLayout borderLayout2 = new BorderLayout(); private GridLayout rbtnLayout = new GridLayout(10, 1, 1, 1); private static final int UP = 1,LEFT = 2,DOWN = 3,RIGHT = 4;//蛇運動方向 private static final int ROWS = 30;//游戲區行數 private static final int COLS = 50;//游戲區列數 private boolean isPause = false;//游戲暫停標志 private boolean isEnd;//游戲結束標志 private SnakeBody snake;//貪食蛇 private int score = 0;//當前得分 SnakeThread thread = new SnakeThread();//游戲主線程 private GridLayout grid1 = new GridLayout(ROWS,COLS,0,0);//游戲區布局 private JButton[][] blocks;//游戲區的所有方塊 JPanel jPanel2 = new JPanel(); JLabel jLabel1 = new JLabel(“得分:”); JLabel lblScroe = new JLabel(“0”); ButtonGroup buttonGroup1 = new ButtonGroup(); JRadioButton rbtnLow = new JRadioButton(“初級”, true); JRadioButton rbtnMid = new JRadioButton(“中級”); JRadioButton rbtnHigh = new JRadioButton(“高級”); public Snake(){ super(“貪食蛇游戲”); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane =(JPanel)this.getContentPane(); contentPane.setLayout(borderLayout2); this.setResizable(false); this.setSize(new Dimension(512, 414)); keyAction keyAct = new keyAction(); this.addKeyListener(keyAct); btnStart.addKeyListener(keyAct); btnPause.addKeyListener(keyAct); btnExit.addKeyListener(keyAct); rbtnLow.addKeyListener(keyAct); rbtnMid.addKeyListener(keyAct); rbtnHigh.addKeyListener(keyAct); btnAction btnAct = new btnAction(); btnStart.addActionListener(btnAct); btnPause.addActionListener(btnAct); btnExit.addActionListener(btnAct); rbtnLow.addActionListener(btnAct); rbtnMid.addActionListener(btnAct); rbtnHigh.addActionListener(btnAct); pnlLeft.setLayout(borderLayout1); playPanel.setLayout(grid1); playPanel.setBackground(Color.white); playPanel.setBorder(BorderFactory.createEtchedBorder()); jPanel2.setLayout(rbtnLayout); buttonGroup1.add(rbtnLow); buttonGroup1.add(rbtnMid); buttonGroup1.add(rbtnHigh); rbtnLow.setSelected(true); pnlLeft.add(playPanel); pnlLeft.add(jPanel2, BorderLayout.WEST); jPanel2.add(“f1”, rbtnLow); jPanel2.add(“f2”, rbtnMid); jPanel2.add(“f3”, rbtnHigh); pnlTop.add(btnStart); pnlTop.add(btnPause); pnlTop.add(btnExit); pnlTop.add(jLabel1); pnlTop.add(lblScroe); contentPane.add(pnlTop, BorderLayout.NORTH); contentPane.add(pnlLeft, BorderLayout.CENTER); //創建并初始化游戲區方塊 blocks = new JButton[ROWS][COLS]; for(int i = 0;i < ROWS;i++){ for(int j = 0;j < COLS;j++){ blocks[i][j] = new JButton(); blocks[i][j].setBackground(Color.lightGray); blocks[i][j].setVisible(false); playPanel.add(blocks[i][j]); } } } public static void main(String[] args){ Snake app = new Snake(); app.validate(); app.setVisible(true); } public void start(){ snake = new SnakeBody();//創建蛇身 if(rbtnLow.isSelected()) snake.setSpeed(300); if(rbtnMid.isSelected()) snake.setSpeed(200); if(rbtnHigh.isSelected()) snake.setSpeed(100); score = 0; isPause = false; isEnd = false;// btnPause.setText(“暫停”); //初始化游戲區 for(int i = 0;i < ROWS;i++){ for(int j = 0;j < COLS;j++){ blocks[i][j].setBackground(Color.lightGray); blocks[i][j].setVisible(false); } } //在游戲區內隨機放置豆 int x =(int)(Math.random()* ROWS); int y =(int)(Math.random()* COLS); while(blocks[x][y].isVisible()){ x =(int)(Math.random()* ROWS); y =(int)(Math.random()* COLS); } blocks[x][y].setBackground(Color.yellow); blocks[x][y].setVisible(true); try { thread.start(); } catch(IllegalThreadStateException illegalThreadStateException){} } class SnakeBody { public int row[]; public int col[]; public int len = 3, direction = RIGHT, lastdirection = RIGHT; public long speed = 300; public SnakeBody(){ len = 3; direction = RIGHT; lastdirection = RIGHT; row = new int[ROWS]; col = new int[COLS]; for(int i = 0;i <= len;i++){ row[i] = 1; col[i] = len1]; col[i] = col[i-1]; } //根據蛇身運動方向,決定蛇頭位置 switch(direction){ case UP: { if(lastdirection == DOWN) row[0] += 1; else { row[0]-= 1; lastdirection = UP; } break; } case LEFT: { if(lastdirection == RIGHT) col[0] += 1; else { col[0]-= 1; lastdirection = LEFT; } break; } case DOWN: { if(lastdirection == UP) row[0]-= 1; else { row[0] += 1; lastdirection = DOWN; } break; } case RIGHT: { if(lastdirection == LEFT) col[0]-= 1; else { col[0] += 1; lastdirection = RIGHT; } break; } } //當蛇頭碰到墻時,蛇頭碰到蛇身時,游戲結束 if(row[0] >= ROWS || row[0] < 0 || col[0] >= COLS || col[0] < 0 || blocks[row[0]][col[0]].getBackground().equals(Color.green)){ isEnd = true; JOptionPane.showMessageDialog(null, “游戲結束!”); } //吃豆 if(blocks[row[0]][col[0]].getBackground().equals(Color.yellow)){ score += 100; lblScroe.setText(Integer.toString(score)); if(score % 2000 == 0 && speed > 100){ JOptionPane.showMessageDialog(null, “恭喜你過關了,準備進入下一關”); speed-= 100; if(speed == 200) rbtnMid.setSelected(true); if(speed == 100) rbtnHigh.setSelected(true); } } //吃豆后,蛇身加長,并隨機顯示下一個豆 if(blocks[row[0]][col[0]].getBackground().equals(Color.yellow)){ len++; int x, y; x =(int)(Math.random()* ROWS); y =(int)(Math.random()* COLS); while(blocks[x][y].isVisible()){ x =(int)(Math.random()* ROWS); y =(int)(Math.random()* COLS); } blocks[x][y].setBackground(Color.yellow); blocks[x][y].setVisible(true); } blocks[row[0]][col[0]].setBackground(Color.green); blocks[row[0]][col[0]].setVisible(true);//顯示蛇頭 } } class SnakeThread extends Thread { public void run(){ while(true){ try { Thread.sleep(snake.speed);//控制移動速度 if(!isEnd &&!isPause){ snake.move();//移動蛇身 } if(isEnd){ //游戲結束 btnStart.setEnabled(true); } } catch(Exception ex){} } } } class keyAction extends KeyAdapter { public void keyPressed(KeyEvent e){ if(!isEnd &&!isPause){ //根據用戶按鍵,設置蛇運動方向 if(e.getKeyCode()== KeyEvent.VK_UP){ snake.direction = UP; } if(e.getKeyCode()== KeyEvent.VK_DOWN){ snake.direction = DOWN; } if(e.getKeyCode()== KeyEvent.VK_LEFT){ snake.direction = LEFT; } if(e.getKeyCode()== KeyEvent.VK_RIGHT){ snake.direction = RIGHT; } } } } //按鈕監聽響應處理類 private class btnAction implements ActionListener { public void actionPerformed(ActionEvent ae){ Object source = ae.getSource(); if(source.equals(btnStart)){ btnStart.setEnabled(false); start(); } if(source.equals(btnPause)){ if(isPause == true){ btnPause.setText(“暫停”); } if(isPause == false){ btnPause.setText(“繼續”); } isPause =!isPause; } if(source.equals(btnExit)){ System.exit(0); } if(source.equals(rbtnLow)){ snake.setSpeed(300); } if(source.equals(rbtnMid)){ snake.setSpeed(200); } if(source.equals(rbtnHigh)){ snake.setSpeed(100); } } } } 高級語言程序設計 課程設計報告 Experiment Designing reporter 課程名稱:高級語言程序設計 英文名稱 : C Program Experiment Designing 專業:自動化 111 學號: XXX 姓名: XXX 指導教師: XXX 日期: 2012 年 6月 17日至 2011 年6 月 20 日 山東工商學院信電學院 一:課程設計內容 程序功能介紹 貪吃蛇游戲是一個經典小游戲,深受眾多玩家喜愛,其規則是:一條蛇在封閉圍墻里,圍墻里隨機出現一個食物,通過按鍵盤四個光標鍵控制蛇向上下左右四個方向移動,蛇頭撞倒食物,則食物被吃掉,蛇身體長一節,同時記10分,接著又出現食物,等待蛇來吃,如果蛇在移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結束。此游戲不僅能鍛煉人的思維敏捷性,而且還可以提高玩家的邏輯判斷能力。設計思路 我們小組稱設計本次課題——貪吃蛇的思路為“貪快速上手貪吃蛇三步曲”: 第一步: 尋找到一個真正可以運行的已用C編好的貪吃蛇。因為我們畢竟從未看到過用C編游戲的程序,讓我們兩手一抹黑的開始編寫是有一定的困難的,如果我們自己找一個已經設計好的程序,以此為跳板實現我們想要達到的效果,那么肯定是高效的。所以我們組統一決定,去尋找一個可以運行的C編譯的貪吃蛇。第二步: 運行游戲并了解游戲程序。 我們認為,只有你運行并了解一個游戲,才能知道游戲里需要什么樣的改進和創新,如果你自己本身就沒玩過這個游戲,那么你就是再有技術,你也永遠改進和改編不了一個游戲,因為你根本不知道你在干什么。 同樣重要的是了解游戲程序。因為只有看懂了程序,才能實現對他的改編,才能游刃有余。第三步: 尋找模塊并分類,而后進行改編。 尋找到你想要改變的游戲內容的控制模塊,比如,我想要增加一堵墻,那么就應該找到 void DrawK(void){ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i<=500;i+=10) rectangle(i,200,i+10,209);} 然后要找到:改變蛇初始長度、顏色、初始位置的模塊,改變蘋果出現位置的模塊,讓蛇見墻死的模塊,讓蛇吃蘋果加長的模塊???.并且進行分類,這樣下次再想實現某個目標時,可以一目了然的進行改編。對于找到的模塊如何進行改編呢?怎么才能知道某個數值或函數代表什么呢? 我們有兩個方法: 1.)看名字,比如snakecolor(),很明顯他的意思是蛇的顏色。2.)控制變量猜想,比如設置墻的時候for(i=200;i<=500;i+=10); rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們可以猜想:它很像是坐標上的(x,y)的格式,是不是呢?可可以先讓其他數值不變,只讓309改變,改變后發現上面的墻變粗了,由此可見這個數字控制的是一堵墻的最下面一行的坐標。 關于該程序的相關分析思路答題模板: 1.貪吃蛇程序流程圖如下: 二.貪吃蛇程序的改編: 經過小組成員的認真研究我們對其進行了如下改編 第一步加墻 void DrawK(void){ /*setbkcolor(MAGENTA);*/ setcolor(5);// 可以改變顏色 setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/ 橫向上的墻: for(i=100;i<=600;i+=10)// 本行代表行坐標上:100代表墻的初始位置,i<=600代表墻的結尾。 { rectangle(i,60,i+10,69);//本行代表縱坐標上:60代表墻的最上面一行的位置,69代表墻最下面一行的位置。69-60=9,9代表墻塊的厚度 } 縱向上的墻: for(i=100;i<=400;i+=10)//本行代表縱坐標上:100代表墻的初始位置,i<=400代表墻的結尾 { rectangle(100,i,109,i+10);//本行代表縱坐標上:100代表墻的最左邊面一行的位置,69代表墻最右面一行的位置。69-60=9,9代表墻塊的寬度 } 我們認為本模塊最重要的是for語句控制的坐標代表的意思。只要明白了坐標的意思,就可以實現對游戲的改編。 第二步就是進行對新加入的墻蛇是否撞上死亡 讓蛇撞墻死 if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&& snake.y[0]<=215) /*其中,對x,y范圍的控制,實際是對蛇撞擊的死亡區域的限制。*/ { GameOver();/*本次游戲結束*/ snake.life=1;/*蛇死*/ } 相應的新添加的墻。 for(i=200;i<=500;i+=10)/*畫圍墻*/ { rectangle(i,200,i+10,209);/*指定位置*/ 第三步食物的定點出現 if(food.yes==1)/*需要出現新食物*/ 這里說明一下:rand()產生0-65535的數,在limits.h里有定義%400后產生一個0-399的數+60 則為 60 –459,即:%400+60意思是在60~399之間隨機產生一個數。 { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物隨機出現后必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*畫面上有食物了*/ } 如果將food.x=(常數a)那么食物就會出現在x=a行的隨機列,對于food.y=(常數b)那么食物就出現在y=b列的隨機行。 第四步對食物墻壁的顏色以及對蛇的運動速個性化調節 setcolor(4);// 對顏色的調整 int gamespeed=50000;/*游戲速度自己調整*/ 通過改變變量的值,就可以個性化選擇自己喜歡的顏色,這將是一場別開生面的游戲界面。* 紅色代表解析淺藍代表提示 三.課程設計總結 有言曰:“實踐出真知”,在這幾天的課程設計實踐中,我們組三人真正的體會到了這句話的真諦。 在經歷了一學期的C語言學習后,我們從以往的“紙上談兵”直接過渡到“實際作戰”。我們實現了讓靜態的程序變成動態的游戲效果,雖然我們只是改編了一下別人做好的程序,但我們同樣由此獲益匪淺,感觸頗深,當然也發現了許多自己的不足。 首先,在我們剛剛進行第一步“尋找程序”的時候,就被擱淺了,因為我們發現,在網上能找到一個真正符合我們使用標準的程序很難,就是找到了幾個也沒有能運行它們的程序。我們花費了前兩天的時間來尋找能夠使用的程序和軟件,但最后還是一無所獲,正當我們一籌莫展的時候,我們的導師——楊老師給我們帶來了曙光,使得我們在黑暗中找到了希望的光明,楊老師給我們傳來了一個上屆師哥做好的程序,并且把它的運行軟件也給了我們,這對我們來說無疑是雪中送炭,得到這個程序后,我們三個人看到了C語言運行一個游戲的流程和方法,我們腦中也大概有了一個思路。我們三個人以此程序為跳板,直接開始對程序模塊進行挑選,因為我們已經浪費了兩天,所以我們決定進行分工作業,分別去尋找:筑墻模塊,加蘋果模塊,撞墻死模塊。最后我們用了一下午時間完成了三大步中的前兩大步和第三步的第一部分,剩下的就是最重要而充滿挑戰的改編了,從以上的操作中,讓我們明白了找對一個平臺的重要性,這個平臺就是老師給我們的程序,就是我們的前進方向。沒有了方向了的征程,一開始就是個錯誤。在我們尋找程序模塊的時候,我們對于程序中的很多東西都是模模糊糊的概念,比如struck是什么,比如for語句的使用,以及for語句的循環體是什么,當然我們也發現了定義字符在長的程序中的方便與重要性。還有就是我們發現程序在編寫時的規范性很重要,比如同級別花括號的位置的對應,對應好了,模塊就好找,對應不好就很亂。還有定義函數及變量的時候,函數名字和變量名最好是見名知意,比如我們所看的程序中,gamespeed,snakecolour,food.....在最后的攻堅階段,為了實現對程序的改編,我們使用控制變量猜想法是正確的選擇,比如設置墻的時候for(i=200;i<=500;i+=10); rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們猜想:它很像是坐標上的(x,y)的格式,是不是呢?我們先讓其他數值不變,只讓309改變,改變后發現上面的墻變粗了,由此我們知道這個數字控制的是一堵墻的最下面一行的坐標。我們用這個方法知道了其他很多數值的用途。我們用這種方法先是知道了如何設置一堵墻,在我們欣喜設置一堵墻以后才發現:蛇撞了墻后不死。在我們進行了全局來看以后才知道,原來設計一堵墻,都要再設計一個if語句來使得蛇在這個范圍內會死亡。并且我們發現在設計這個if語句的時候,不僅要計算好墻的坐標,而且還要用好邏輯語言(&&,||!)同時語句的運算順序也很重要。剛一開始我們忽略的&&和關系運算符級別的高低,使得我們設計的墻,總是撞不死蛇,為此我們很是惱火,著急的組員還在這里發生了點小摩擦,由此可見C語言的嚴謹性! 最后我們又通過在網上查找信息,知道了隨機數發生器randomize()的用法:rand()=x%+d 意思是說在d~(x-1)之間隨機產生一個數字。我們很自然的聯想到,如果把food.x等于常數a;把food.y等于一個;x%+d的隨機數,那不就能固定只在某一行出現蘋果了嗎?所以我們覺得,充分利用手邊的資源也是很重要的,畢竟C語言很高深,課本上的東西總是有限的,要想知道更多的東西還需多練習,多查閱資料。總之:革命尚未成功,通知還需努力啊!四個人感受: 湯X: 就我個人而言,這次課程設計,我覺得我最大的收獲就是:我明白了,我們其實真的沒那么厲害,我們真的還有很多東西不會,我們真的連課本上的基本東西都沒掌握,課本上的東西,真的也只是C語言這個大海中的一滴水而已。而在我本人還沒有掌握好課本的知識點的情況下,做起這個程序自然很費事,一個簡單的課本P293講到的struct結構體,我一開始竟然忘記它是什么意思,不知道它是什么,就更不用談怎么用它了。還有邏輯語言的使用。我想,現在肯定有很多同學還不知道邏輯運算的優先次序吧?這個問題我本人在使用邏輯語言的時候也不太會,還查看了書。像這些小的知識點,我個人認為如果掌握不好的話,是不可能讓整個大程序運行起來的。還有比如我在遇到程序顯示“else多余”的警告時候不不知所措,問了老師才知道是if()后面加了“;”而且if沒有用“{}”來固定范圍,這個錯誤原因是分號使得if語句結束了,孤立的else當然是多余的了。一個小小的分號使得程序無法運行,由此可見在今后的編程中,一定要注意謹慎,仔細。同時要注意記住平時編程的時候,出現的錯誤指示是什么意思。比如這次的“else多余”就是因為if后多了分號。還有在編程時候,書寫一定要規范,特別是if語句的花括號的位置要對應起來,因為位置決定范圍。注意定義變量和函數要使用規范的英文單詞,這樣才能見名知意,為以后修改找變量節省時間。對于這次課題中,“設計一個墻,就要對應一個函數舍得蛇撞墻死”,讓我明白,C語言程序中各部分的聯系性,牽一發而動全身,所以在編程時一定要注意全局的把握。我們最后還要說說在編程中,好好利用網絡資源,因為課本里的東西總是有限的,而C語言又那么高深,像隨機數發生器,還有顏色的定都是我第一次接觸,這些東西的用處可是頗大,以后一定好好學習。多看,多練,多總結。最后還要感謝指導老師,楊老師對我學習的幫助和指導。徐XXX: 剛開始拿到題目時候什么也不會一片茫然,從網上找了一個程序一看,太嚇人了,這么長怎么看啊,而且還是錯誤的。沒辦法只能硬著頭皮去改了,但是在改的過程中才發現其實c語言沒有想象的那么難而且還很有意思,只是自己平時沒有好好學所以在改的時候非常吃力,有很多簡單的知識都不知道,沒有記住。沒辦法只能借助與課本了。但是幾天下來發現自己已經不再像以前那樣是個菜鳥了,雖然很多知識還沒掌握。同時在編改程序的時候切記不能煩躁要靜心慢慢來,好幾次自己都因心燥出現了很多不該出現的錯誤浪費了很多時間。 對鍵盤的熟悉在編程時也是很重要的,自己在寫的時候往往就是跟一指禪差不多眼睛盯著鍵盤打,打錯了也不知道最后導致整個程序都是錯誤的,就因為一個打錯了一個字母。 總的來說這次課程設計收獲很多,也知道了自己的不足,在以后的學習中要多實踐,實踐很能提高自己的能力。劉XX: 4天的C語言課程設計上機學習讓我感受頗多,每天都發現新的問題,又不得不絞盡腦汁解決問題,心情就像正弦函數,隨著問題的出現和解決一起一伏。剛開始接觸貪吃蛇的C語言成尋時,看著C-free上面出現的有十幾個錯誤的程序,一片茫然不知所措。只能繼續在網上搜索錯誤較少的程序,并結合書上的基礎知識查看錯誤所在,最終發現是 作為小組中唯一的女生,明顯感覺有壓力,打字速度不如另外兩個男生,對游戲和程序的敏感也不如他們強,有種小小的挫敗感。旁邊小組的同學也給我很大的壓力。他們自己編寫程序,我很佩服他們,越是這樣想。心里越著急,越不能解決問題,每當感覺有壓力的時候,就提醒自己心靜,認真的看程序。在學習過程中,深深的發現了自己的不足之處,對于C語言,只學了一點點皮毛東西,想要學好C語言,編好程序,還要付出很多的努力,還要用更多的時間來學習C語言這門深奧的學科。現在只能借用別人已經寫好的程序,在別人的基礎上,一點點進步和學習,比如程序中筑墻,需要仿照已有的程序,結合邏輯運算,關系運算和數學知識才能讓蛇撞墻死。蘋果位置的出現也同樣需要進一步的搜索,通過更改食物的橫縱坐標以及出現的概率來確定食物的位置。編寫程序時,也發現書上的東西對于程序的某些部分來說,沒有什么作用,顯得太淺顯,想要實現老師給出的一些要求,還需要實踐,通過上機學習,自己摸索才能成功。一次次修改,一次次失敗,就像貪吃蛇想方設法吃蘋果會Game over,我們只有認真學好基礎理論,并結合實踐經驗才會取得進步。 在這次學習過程中,我很感謝我的組員,雖然有時我們的意見出現分歧,但是通過大家的共同努力,我們收獲了很多,一起討論,一起研究怎樣解決問題,對老師提出的要求個個擊破,我們擰成一股繩共同應對問題,讓我感受了團隊的力量希望在以后的學習過程中,我們依然能夠互相幫助,共同進步。 五 課程設計修改后的程序.加墻 for(i=200;i<=500;i+=10)/*畫圍墻*/ { rectangle(i,200,i+10,209);/*指定位置1*/ } for(i=120;i<=200;i+=10)/*畫圍墻*/ { rectangle(100,i,109,i+10);/*指定位置2*/ } 2.指定位置加蘋果 if(food.yes==1)/*需要出現新食物*/ { food.x=rand()60; food.y=rand()%200+60; while(food.x%10!=0) food.x++; while(food.y%10!=0) food.y++; food.yes=0;3.指定地方撞墻死 if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&& snake.y[0]<=215) { GameOver();/*本次游戲結束*/ snake.life=1;/*蛇死*/ } if(snake.x[0]>90&&snake.x[0]<110&&snake.y[0]>=110&&snake.y[0]<=215) { GameOver();/*本次游戲結束*/ snake.life=1;/*蛇死*/ } } 貪吃蛇游戲程序設計報告 貪吃蛇游戲設計 姓名: 張力 學號: 1002032 3完成日期: 月 日1 貪吃蛇游戲程序設計報告 一、設計目的 貪吃蛇游戲程序功能的實現主要是建立在二維數組和圖形界面的應用上,通過編寫游戲程序能夠熟悉掌握相關數組和圖形函數的運用,提高編程水平,增加編程的興趣 二、總體設計 主函數 ↓ 圖形驅動Init 畫界面DrawK 游戲具體過程GamePlay 圖形結束Close ↓ 游戲結束GameOver 輸出成績PrScore 三、詳細設計(項目成員及分工、模塊功能說明(如函數功能、入口及出口參數說明,函數調用關系描述等) ①主函數main(): 定義使用的常數,全局變量及函數原型說明,并調用Init()函數初始化圖形系統;然后調用DrawK()函數畫界面,調用GamePlay()函數實現游戲的具體過程,游戲結束后調用Close()函數關閉圖形系統結束程序。 ②畫界面函數DrawK(): 主界面是一個密封的圍墻,用兩個循環語句分別在水平方向和垂直方向輸出連續的寬度和高度均為10個單位的矩形小方塊,設置成淡青色,背景顏色為黑色。 ③游戲具體過程函數GamePlay(): 算法過程: a.設置初始值。為防止食物出現在一個位置上,要設置隨機數發生器,真正產生隨機數。初始時,蛇只有蛇頭,設定一個開始方向; b.循環執行,直到按Esc鍵退出; c.沒有按鍵的情況下,循環執行。 如果沒有食物,隨機出現食物;食物的隨機出現要確保它的位置在10的倍數位置上,因為蛇的坐標都是以10為模的;如果有食物,則顯示食物,蛇 貪吃蛇游戲程序設計報告 移動身體,根據蛇的方向改變坐標值,并判斷蛇是否撞到了墻或自己吃到了自己,如果出現這兩種情況之一,則蛇死;調用游戲結束函數GamePlay(),結束本次游戲; 判斷蛇吃到食物的方法是蛇頭的坐標和食物的坐標都相等;如果蛇吃到了食物,蛇身體長一節,數組元素增加一個,身體節數、分數都進行相應的改變。 在新位置畫出蛇。采用的方法是每次移動的時候從最后一節開始到倒數第二節,將前一節的坐標賦值給后一節的坐標,移動后只要把最后一節用背景色去除即可。 D.如果有按鍵,則識別按鍵值。如果按鍵為Esc鍵則結束游戲,程序運行結束;如果所按鍵為方向鍵,則根據該鍵改變蛇方向的變量direction的值,相反方向鍵無效。 ④游戲結束函數GameOver(): 游戲結束,清除屏幕,調用輸出分數函數PrScore(),并顯示游戲結束。 ⑤輸出分數函數PrScore(): 在指定位置利用sprintf()將整數轉換為字符串,用outtextxy()輸出,、bar()函數的應用是為了覆蓋原來的值。 ⑥圖形結束函數Close(): 在顯示游戲結束信息的畫面時,按任意鍵關閉圖形系統,程序結束。 四、調試與測試:調試方法,測試結果的分析與討論,測試過程中遇到的主要問題和采取的解決措施等; 將源文件在TC3.0環境下調試運行,前期發現錯誤為游戲界面靜止。 五、源程序清單及執行結果: #include 貪吃蛇游戲程序設計報告 #define UP 0x4800 #define Esc 0x011b #define N 200 /*定義全局變量*/ int i,key;int score=0;/*得分*/ int gamespeed=50000;/*游戲速度可以自己調整*/ struct Food { int x;/*定義食物的橫坐標*/ int y;/*定義食物的縱坐標*/ int yes;/*判斷是否要出現食物的變量*/ }food;/*食物的結構體*/ struct snake { int x[N];int y[N];int node;/*蛇的節數*/ int direction;/*蛇的移動方向*/ int life;/*蛇的生命,0活著,1死亡*/ }snake; void Init(void);/*圖形驅動*/ void Close(void);/*圖形結束*/ void DrawK(void);/*開始畫面*/ void GameOver(void);/*結束游戲*/ void GamePlay(void);/*玩游戲的具體過程*/ void PrScore(void);/*輸出成績*/ /*圖形驅動*/ void Init(void){ int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,“D:TC30LIB”);} /*開始畫面,左上角坐標為(50,40),右下角坐標為(610,460)的圍墻*/ void DrawK(void){ setbkcolor(LIGHTGREEN);setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/ for(i=50;i<=600;i+=10)/*畫圍墻*/ { 貪吃蛇游戲程序設計報告 rectangle(i,40,i+10,49);/*上邊*/ rectangle(i,451,i+10,460);/*下邊*/ } for(i=40;i<=450;i+=10){ rectangle(50,i,59,i+10);/*左邊*/ rectangle(601,i,610,i+10);/*右邊*/ } } /*玩游戲的具體過程*/ void GamePlay(void){ randomize();/*隨機數發生器*/ food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/ snake.life=0;/*蛇還活著^ ^*/ snake.direction=1;/*方向向右*/ snake.x[0]=100;snake.y[0]=100;/*蛇頭*/ snake.x[1]=110;snake.y[1]=100;snake.node=2;/*蛇的節數為2*/ PrScore();/*輸出得分*/ while(1)/*可以重復玩游戲,按Esc鍵結束*/ { While(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/ { if(food.yes==1)/*需要出現新食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物隨機出現后必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*畫面上有食物了*/ } if(food.yes==0)/*畫面上有食物了就要把它顯示出來*/ { setcolor(GREEN); rectangle(food.x,food.y,food.x+10,food.y-10); } for(i=snake.node-1;i>0;i--)/*蛇一個節一個節地往前移*/ { snake.x[i]=snake.x[i-1]; 貪吃蛇游戲程序設計報告 snake.y[i]=snake.y[i-1]; } /*1,2,3,4表示右左上下四個方向,通過判斷這個來移動蛇頭*/ switch(snake.direction) { case 1:snake.x[0]+=10;break; case 2:snake.x[0]-=10;break; case 3:snake.y[0]-=10;break; case 4:snake.y[0]+=10;break; } /*從蛇的第四節開始判斷蛇有沒有自己把自己吃掉*/ for(i=3;i { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver();/*顯示游戲結束*/ snake.life=1;/*蛇死了T T!*/ break; } } If(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*判斷蛇是否撞到墻*/ { GameOver();/*游戲結束*/ snake.life=1;/*蛇死了T T!*/ } if(snake.life==1)/*如果蛇死了就跳出內循環,重新開始*/ break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃掉食物啦!*/ { setcolor(0);/*把畫面上的食物顏色覆蓋掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20; snake.y[snake.node]=-20; /*新的一節先放在看不見的位置,下次循環就取前一節的位置*/ snake.node++;/*蛇的身體長一節*/ food.yes=1;/*畫面上需要出現新的食物*/ score+=10;/*加十分!*/ PrScore();/*輸出新得分*/ } setcolor(4);/*畫出蛇*/ for(i=0;i 貪吃蛇游戲程序設計報告 rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的最后一節*/ rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}/*endwhile(!kbhit)*/ if(snake.life==1)/*如果蛇死了就跳出循環*/ break;key=bioskey(0);/*接收按鍵*/ if(key==Esc)/*按Esc鍵退出*/ break;else if(key==UP&&snake.direction!=4)/*判斷是否往相反方向移動*/ snake.direction=3;else if(key==RIGHT&&snake.direction!=2) snake.direction=1;else if(key==LEFT&&snake.direction!=1) snake.direction=2;else if(key==DOWN&&snake.direction!=3) snake.direction=4;}/*endwhile(1)*/ /*游戲結束*/ void GameOver(void){ cleardevice();/*清除屏幕*/ PrScore();/*輸出得分*/ setcolor(RED);settextstyle(0, 0,4);outtextxy(200,200,“GAME OVER”);/*顯示游戲結束*/ getch();} void PrScore(void)/*輸出成績*/ { char str[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,“score:%d”,score);outtextxy(55,20,str);} 貪吃蛇游戲程序設計報告 void Close(void)/*圖形結束*/ { getch();closegraph();} void main(void)/*主函數*/ { Init();DrawK();GamePlay();Close();} 8第二篇:一場好玩的“貪吃蛇”游戲作文
第三篇:貪吃蛇java課程設計
第四篇:c語言程序貪吃蛇課程設計報告
第五篇:貪吃蛇C語言課程設計報告