本文目錄一覽:
- 1、教你如何使用C語言編寫簡單小遊戲
- 2、用C語言編寫一個具有簡單界面的猜數字遊戲
- 3、怎樣用c語言編寫一個界面好看的遊戲 例如 俄羅斯方塊
- 4、c語言編程 遊戲開始之前的界面 點擊play 開始遊戲
- 5、怎樣用C語言編寫一個小遊戲?
教你如何使用C語言編寫簡單小遊戲
愛玩是人的天性,而C語言是我們計算機專業都要學習的一門基礎 學科.一般來說,是比較枯燥的.那麼,我們能不能通過編一些小遊戲來提高它的趣味性呢?這樣學習程序設計,就不會是一件艱苦 ,枯燥的事,它變得象電腦遊戲一樣充滿好奇,富有樂趣. 1, 總是從Hello,world開始 學習編程的第一個程序,一般就是列印一個親切的詞語——”Hell o,world!”.讓我們來看看這個最簡單的C程序:#incolude /*把輸入輸出函數的頭文件包含進來*/int main(){printf(“Hello, world!”);/*在屏幕上輸出字元串”Hello,world!”*/return 0;/*退出main函數,並返回0*/} 下面我們發現幾個值得改進的地方,1,程序的運行結果一閃而過 .2,每執行這個程序一次都能看見上次運行留下的字元.3,我們 還希望屏幕輸出一個笑臉來歡迎我們. 讓我們來改進一下這個程序吧!1,在return語句的前面加一句:getch ();,表示按任意鍵結束.2,在printf語句前用clrscr函數清屏,要使用這個函數和getch函數,需要在程序開頭再包含頭文件conio.h.3,ASCII碼也有 許多非常好玩的字元,比如ASCII碼值為2的就是一個笑臉,我們可 以用printf(“%c”, 2)來輸出一個笑臉. 現在我們把Hello,world程序改成一個更好看的Hello,world了.下面讓我們開始做遊戲吧! 2, 心動的開始,一個運動中的笑臉 大家小時侯喜歡看動畫片嗎?哈哈,我猜你們都喜歡吧!下面就讓我們來做一個小動畫吧.在屏幕上顯示一個運動的小笑臉,而且當它到達屏幕的邊緣時會自動彈回來.先在程序定義一個在屏幕中運動的點的結構:struct move_point{ int x, y;/*該點的位置,包括x坐標和y坐標*/ int xv, yv;/*該點在x軸,y軸的速度*/};運動的原理是,先擦去物體先前的軌跡,讓物體按其速度移動一段距離,再畫出該物體.讓我們看到以下代碼:gotoxy(man.x, man.y);/*把游標移到指定的坐標*/printf(” “);/*輸出一個空格,把先前的字元擦去*/然後我們讓物體按其速度運動:man.x += man.xv;/*水平方向按x軸的速度運動*/man.y += man.yv;/*垂直方向按y軸的速度運動*/運動後還要判斷物體是否出界,如果出了界,就令物體反彈,即讓 它下一刻的速度等於現在的速度的相反數.最後列印出這個笑臉:gotoxy(man.x, man.y);printf(“%c\b”, 2); /*輸出ASCII碼值為2的”笑臉”字元*/怎麼樣?是不是很有趣呢?不過這個笑臉一直是自己運動,能不能 讓我們來控制它運動呢?不過這個程序沒有什麼目的,也沒有什麼判斷勝負的條件.下面我們就利用這個能控制它移動的笑臉來做一個更有趣的遊戲吧! 4, 在迷宮中探索 小時侯,我常在一些小人書和雜誌上看見一些迷宮的遊戲,非常喜歡玩,還常到一些書上找迷宮玩呢.好的,現在我們用C語言來編個迷宮的遊戲,重溫一下童年的樂趣. 首先,我們定義一個二維數組map,用它來保存迷宮的地圖,其中map[x][y] == ‘#’表示在(x,y)坐標上的點是牆壁.DrawMap函數在屏幕上輸出迷宮的地圖和一些歡迎信息.在main函數里,我們定義了”小人”man的坐標和”目的地”des的 坐標.在遊戲循環中,我們增加了一些用來判斷勝負的語句:if (man.x == des.x man.y == des.y) /*如果人的坐標等於目的地的坐標*/{ gotoxy(35, 3); printf(“Ok! You win!”); /*輸出勝利信息*/….}在判斷按鍵時,如果玩家按的是方向鍵,我們還要先判斷前面是不是有”牆壁”,如果有的話,就不能往前移動了.好的,我們在判斷按鍵的switch語句的各個分支加上了判斷語句,如下:if (map[…][…] == ‘#’) break;/*如果前面是牆壁,就不執行下去*/哇噻!真棒,我們做出了一個完整的遊戲了.當然你還可以通過修改二維數組map來修改迷宮的地圖,讓它更有挑戰性.不過,我們要設計一個更好玩的遊戲—— 5, 聰明的搬運工 大家一定玩過”搬運工”的遊戲吧!這是在電腦和電子字典上較流行的益智遊戲,讓我們動手做一個屬於自己的”搬運工”吧!程序依然用數組map來保存地圖,數組元素如果為空格則表示什麼也沒有,’b’表示箱子,’#’表示牆壁,’*’表示目的地,’i’表示箱子在目的地.我們以後每推一下箱子,不但要改變屏幕的顯示,也要改變map相應元素的值.遊戲的主循環依然是接受按鍵.當接收一個方向鍵,需要判斷小人前面一格的狀態,如果是空地或目的地,則人物可以直接移動;如果是牆壁,則不可移動;如果是箱子或目的地上的箱子,則需要繼續判斷箱子前面一格的狀態:如果前一格是空地或目的地,則人推箱子前進,否則不可移動.好的,我們在switch中增加了這些判斷語句.程序還有一個重要的功能就是判斷勝利.數組Des用來記錄全部目的地的坐標,我們每執行一步操作後,程序就要通過Des數組判斷這些目的地上是否都有箱子了.真棒啊!我們可以做遊戲了.而且是一個老少皆宜,趣味十足的遊戲呢!當然,我們可以通過修改map數組來製作不同的遊戲地圖,我們還可以相互分享好的遊戲地圖呢. 尾聲: 在C++等高級語言還沒出來的時候,很多應用程序也是C語言開發的.C語言在與硬體聯繫緊密的編程中,也佔有重要地位.其實我覺得學習編程,可以通過一些小遊戲,實用的例子來學習.象學習音樂的人,不是要等到把全部樂理學完後才演奏一個完整的曲子.而是剛開始學時就有一些簡單的曲子讓你演奏,讓你立刻就有成就感,讓你很快就能賣弄出來在別人面前表現自己了.通過編遊戲來學習編程,把學習變成遊戲,不失為學習計算機的一種好方法. 好了,編遊戲就這麼簡單,希望大家也嘗試用C語言或其他的語言來做幾個自己喜歡的小遊戲.
用C語言編寫一個具有簡單界面的猜數字遊戲
分析:
先產生一個隨機數N。
然後輸入數I,如果i大於N,則提示大於信息。
如果I小於N,則提示小於信息。
直到I==N,則輸出成功信息。
這是我用C語言寫的。
環境:
WIN-C ,TORBO C,如果是C++環境把倒數第二排getch();刪掉!
已經調試成功:
main()
{
int i=0,n;
srand(time(0));
n=rand()%100+1;
while(i!=n)
{printf(“please input a number:\n”);
scanf(“%d”,i);
if(in)printf(“this number is too big!\n”);
if(in)printf(“this number is too smaller!\n”);
}
if(i==n)
printf(“PASS!%3d”,n);
getch();
}
提示:
srand(time(0));
n=rand()%100+1;
是用來生成一個1~100以內的隨機數,如果你改,把100改成50或者200。如(n=rand()%50+1;
)
怎樣用c語言編寫一個界面好看的遊戲 例如 俄羅斯方塊
別說做遊戲了,做一個正規的窗口都困難得要死!!!
自己看吧。這就是用C語言做的最最簡單的一個窗口:
#include tchar.h
#include windows.h
/* 這個函數由Windows內部函數DispatchMessage()調用 */
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message) /* 處理信息 */
{
case WM_DESTROY:
PostQuitMessage (0); /* 發送WM_QUIT到消息隊列 */
break;
case WM_PAINT:
hdc = BeginPaint (hWnd, ps);
GetClientRect (hWnd, rect);
DrawText (hdc, TEXT(“Hello, Windows NT!”), -1, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint (hWnd, ps);
break;
default: /* 不處理的消息 */
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}
/* 下面是主函數 */
int WINAPI _tWinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nFunsterStil)
{
HWND hWnd; /* 這是窗口的句柄 */
MSG messages; /* 應用程序的消息保存在這裡 */
WNDCLASSEX wincl; /* 窗口類的數據結構 */
TCHAR szClassName[ ] = TEXT(“WindowsApp”); /* 窗口類的類名 */
/* 窗口結構 */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;/* 這個函數由Windows操作系統調用 */
wincl.style = CS_DBLCLKS; /* 獲取雙擊指令 */
wincl.cbSize = sizeof (WNDCLASSEX);
/* 使用默認圖標和滑鼠指針 */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* 沒有菜單 */
wincl.cbClsExtra = 0;/* 窗口類後面沒有多餘的位元組 */
wincl.cbWndExtra = 0;/* 結構或者窗口實例 */
/* 使用窗口的默認顏色作為窗口的背景色 */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* 註冊窗口類。如果註冊失敗,那麼就退出程序 */
if (!RegisterClassEx (wincl))
return 0;
/* 窗口類已被註冊。創建它的程序 */
hWnd = CreateWindowEx (
0,
szClassName, /* 類名 */
TEXT(“Windows App”), /* 窗口標題欄的文字 */
WS_OVERLAPPEDWINDOW, /* 默認窗口 */
CW_USEDEFAULT, /* 窗口左上角的位置 */
CW_USEDEFAULT, /* 窗口右下角的位置 */
544, /* 窗口寬度(以「像素」位單位) */
375, /* 窗口高度(以「像素」位單位) */
HWND_DESKTOP, /* 窗口是桌面的子窗口 */
NULL,/* 該窗口無菜單 */
hThisInstance, /* 程序實例的句柄 */
NULL /* 沒有窗口創建的數據 */
);
/* 顯示窗口 */
ShowWindow (hWnd, nFunsterStil);
/* 重繪窗口 */
UpdateWindow(hWnd);
/* 運行消息循環。循環到GetMessage()函數返回0 */
while (GetMessage (messages, NULL, 0, 0))
{
/* 把虛擬信息翻譯成字元信息 */
TranslateMessage(messages);
/* 發送信息到窗口過程 */
DispatchMessage(messages);
}
/* 返回PostQuitMessage()函數的返回值 */
return messages.wParam;
}
c語言編程 遊戲開始之前的界面 點擊play 開始遊戲
【教程】c語言怎麼編遊戲
純真童趣的《泡泡堂》,還有武林情仇,笑傲江湖的《劍俠情緣on
line》.它是e時代常談的話題,是互動式娛樂的主力軍,是一種
高層次的綜合藝術,更是一個民族的文化,世界觀的全新傳播方式
.作為遊戲玩家的我們,是不是想設計一個屬於自己的遊戲呢?
愛玩是人的天性,而C語言是我們計算機專業都要學習的一門基礎
學科.一般來說,是比較枯燥的.那麼,我們能不能通過編一些小
遊戲來提高它的趣味性呢?這樣學習程序設計,就不會是一件艱苦
,枯燥的事,它變得象電腦遊戲一樣充滿好奇,富有樂趣.這正是
我發貼的目的.
1, 總是從Hello,world開始
學習編程的第一個程序,一般就是列印一個親切的詞語——”Hell
o,world!”.讓我們來看看這個最簡單的C程序:
#incolude stdio.h /*把輸入輸出函數的頭文件包含進來*/
int main()
{
printf(“Hello,
world!”);/*在屏幕上輸出字元串”Hello,world!”*/
return 0;/*退出main函數,並返回0*/
}
下面我們發現幾個值得改進的地方,1,程序的運行結果一閃而過
.2,每執行這個程序一次都能看見上次運行留下的字元.3,我們
還希望屏幕輸出一個笑臉來歡迎我們.(大家不要小看了這個笑臉
曾經有人發貼專門問呢)讓我們來改進一下這個程序吧!
1,在return語句的前面加一句:getch ();,表示按任意鍵結
束.2,在printf語句前用clrscr函數清屏,要使用這個函數和get
ch函數,需要在程序開頭再包含頭文件conio.h.3,ASCII碼也有
許多非常好玩的字元,比如ASCII碼值為2的就是一個笑臉,我們可
以用printf(“%c”, 2)來輸出一個笑臉.
現在我們把Hello,world程序改成一個更好看的Hello,world了.下
面讓我們開始做遊戲吧!
2, 心動的開始,一個運動中的笑臉
大家小時侯喜歡看動畫片嗎?哈哈,我猜你們都喜歡吧!下面就讓
我們來做一個小動畫吧.在屏幕上顯示一個運動的小笑臉,而且當
它到達屏幕的邊緣時會自動彈回來.
先在程序定義一個在屏幕中運動的點的結構:
struct move_point
{
int x, y;/*該點的位置,包括x坐標和y坐標*/
int xv, yv;/*該點在x軸,y軸的速度*/
};
運動的原理是,先擦去物體先前的軌跡,讓物體按其速度移動一段
距離,再畫出該物體.讓我們看到以下代碼:
gotoxy(man.x, man.y);/*把游標移到指定的坐標*/
printf(” “);/*輸出一個空格,把先前的字元擦去*/
然後我們讓物體按其速度運動:
man.x += man.xv;/*水平方向按x軸的速度運動*/
man.y += man.yv;/*垂直方向按y軸的速度運動*/
運動後還要判斷物體是否出界,如果出了界,就令物體反彈,即讓
它下一刻的速度等於現在的速度的相反數.最後列印出這個笑臉:
gotoxy(man.x, man.y);
printf(“%c\b”, 2); /*輸出ASCII碼值為2的”笑臉”字元*/
怎麼樣?是不是很有趣呢?不過這個笑臉一直是自己運動,能不能
讓我們來控制它運動呢?答案是肯定的,讓我們繼續往下學吧!
3, 交互的實現——讓我們來控制笑臉運動
這個程序的主要功能是接受按鍵,如果接收的是方向鍵,就讓笑臉
順著方向移動,如果接收的是ESC鍵就退出程序,其他按鍵則忽略
處理.接受按鍵我們用以下兩條語句:
while (bioskey(1) == 0);/*等待按鍵*/
key = bioskey(0);/*把接收的按鍵的鍵盤碼賦給變數key*/
然後用switch語句來判斷按鍵以及執行相關操作,如下:
switch (key) /*對變數key的值進行判斷*/
{
case UP: /*如果按的是向上鍵*/
… break; /*讓物體向上運動,並退出switch*/
case DOWN: /*如果按的是向下鍵*/
… break; /*讓物體向下運動,並退出switch*/
case LEFT: /*向左鍵*/
… break;;/*向左運動*/
case RIGHT: /*向右鍵*/
… break;/*向右運動*/
default:
break;/*其他按鍵則忽略處理*/
}
怎麼樣,是不是有了玩遊戲的感覺了?不過這個程序沒有什麼目的
,也沒有什麼判斷勝負的條件.下面我們就利用這個能控制它移動
的笑臉來做一個更有趣的遊戲吧!
4, 在迷宮中探索
小時侯,我常在一些小人書和雜誌上看見一些迷宮的遊戲,非常喜
歡玩,還常到一些書上找迷宮玩呢.好的,現在我們用C語言來編
個迷宮的遊戲,重溫一下童年的樂趣.
首先,我們定義一個二維數組map,用它來保存迷宮的地圖,其中m
ap[x][y] == ‘#’表示在(x,y)坐標上的點是牆壁.DrawMap函數
在屏幕上輸出迷宮的地圖和一些歡迎信息.
在main函數里,我們定義了”小人”man的坐標和”目的地”des的
坐標.在遊戲循環中,我們增加了一些用來判斷勝負的語句:
if (man.x == des.x man.y == des.y) /*如果人的坐標等於目
的地的坐標*/
{
gotoxy(35, 3);
printf(“Ok! You win!”); /*輸出勝利信息*/
….
}
在判斷按鍵時,如果玩家按的是方向鍵,我們還要先判斷前面是不
是有”牆壁”,如果有的話,就不能往前移動了.好的,我們在判
斷按鍵的switch語句的各個分支加上了判斷語句,如下:
if (map[…][…] == ‘#’) break;/*如果前面是牆壁,就不執行
下去*/
哇噻!真棒,我們做出了一個完整的遊戲了.當然你還可以通過修
改二維數組map來修改迷宮的地圖,讓它更有挑戰性.不過,我們
要設計一個更好玩的遊戲——
5, 聰明的搬運工
大家一定玩過”搬運工”的遊戲吧!這是在電腦和電子字典上較流
行的益智遊戲,讓我們動手做一個屬於自己的”搬運工”吧!
程序依然用數組map來保存地圖,數組元素如果為空格則表示什麼
也沒有,’b’表示箱子,’#’表示牆壁,’*’表示目的地,’i
‘表示箱子在目的地.我們以後每推一下箱子,不但要改變屏幕的
顯示,也要改變map相應元素的值.
遊戲的主循環依然是接受按鍵.當接收一個方向鍵,需要判斷小人
前面一格的狀態,如果是空地或目的地,則人物可以直接移動;如
果是牆壁,則不可移動;如果是箱子或目的地上的箱子,則需要繼
續判斷箱子前面一格的狀態:如果前一格是空地或目的地,則人推
箱子前進,否則不可移動.好的,我們在switch中增加了這些判斷
語句.
程序還有一個重要的功能就是判斷勝利.數組Des用來記錄全部目
的地的坐標,我們每執行一步操作後,程序就要通過Des數組判斷
這些目的地上是否都有箱子了.
真棒啊!我們可以做遊戲了.而且是一個老少皆宜,趣味十足的游
戲呢!當然,我們可以通過修改map數組來製作不同的遊戲地圖,
我們還可以相互分享好的遊戲地圖呢.
尾聲:
在C++等高級語言還沒出來的時候,很多應用程序也是C語言開發的
.C語言在與硬體聯繫緊密的編程中,也佔有重要地位.
其實我覺得學習編程,可以通過一些小遊戲,實用的例子來學習.
象學習音樂的人,不是要等到把全部樂理學完後才演奏一個完整的
曲子.而是剛開始學時就有一些簡單的曲子讓你演奏,讓你立刻就
有成就感,讓你很快就能賣弄出來在別人面前表現自己了.通過編
遊戲來學習編程,把學習變成遊戲,不失為學習計算機的一種好方
法.
好了,編遊戲就這麼簡單,希望大家也嘗試用C語言或其他的語言
來做幾個自己喜歡的小遊戲.
怎樣用C語言編寫一個小遊戲?
「貪吃蛇」C代碼:
#include stdio.h
#include stdlib.h
#include conio.h
#include time.h
#include Windows.h
#define W 78 //遊戲框的寬,x軸
#define H 26 //遊戲框的高,y軸
int dir=3; //方向變數,初值3表示向「左」
int Flag=0; //吃了食物的標誌(1是0否)
int score=0; //玩家得分
struct food{ int x; //食物的x坐標
int y; //食物的y坐標
}fod; //結構體fod有2個成員
struct snake{ int len; //身長
int speed; //速度
int x[100];
int y[100];
}snk; //結構體snk有4個成員
void gtxy( int x,int y) //控制游標移動的函數
{ COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void gtxy( int x,int y); //以下聲明要用到的幾個自編函數
void csh( ); //初始化界面
void keymove( ); //按鍵操作移動蛇
void putFod( ); //投放食物
int Over( ); //遊戲結束(1是0否)
void setColor(unsigned short p, unsigned short q); //設定顯示顏色
int main( ) //主函數
{ csh( );
while(1)
{ Sleep(snk.speed);
keymove( );
putFod( );
if(Over( ))
{system(「cls」);
gtxy(W/2+1,H/2); printf(「遊戲結束!T__T」);
gtxy(W/2+1,H/2+2); printf(「玩家總分:%d分」,score);
getch( );
break;
}
}
return 0;
}
void csh( ) //初始化界面
{ int i;
gtxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);
for(i=0;i=W;i=i+2) //橫坐標要為偶數,因為這個要列印的字元佔2個位置
{ setColor(2, 0); //設定列印顏色為綠字黑底
gtxy(i,0); printf(“■”); //列印上邊框
gtxy(i,H); printf(“■”); //列印下邊框
}
for(i=1;iH;i++)
{ gtxy(0,i); printf(“■”); //列印左邊框
gtxy(W,i); printf(“■”); //列印右邊框
}
while(1)
{ srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )
fod.x=rand()%(W-4)+2; //隨機函數rand( )產生一個從0到比」(W-4)」小1的數再加2
fod.y=rand()%(H-2)+1; //隨機函數rand( )產生一個從0到比」(H-2)」小1的數再加1
if (fod.x%2==0) break; //fod.x是食物的橫坐標,要是2的倍數(為偶數)
}
setColor(12, 0); //設定列印顏色為淡紅字黑底
gtxy(fod.x,fod.y); printf(“●”); //到食物坐標處列印初試食物
snk.len=3; //蛇身長
snk.speed=350; //刷新蛇的時間,即是移動速度
snk.x[0]=W/2+1; //蛇頭橫坐標要為偶數(因為W/2=39)
snk.y[0]=H/2; //蛇頭縱坐標
setColor(9, 0); //設定列印顏色為淡藍字黑底
gtxy(snk.x[0], snk.y[0]); printf(“■”); //列印蛇頭
for(i=1;isnk.len;i++)
{ snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];
gtxy(snk.x[i],snk.y[i]); printf(“■”); //列印蛇身
}
setColor(7, 0); //恢復默認的白字黑底
return;
}
void keymove( ) //按鍵操作移動蛇
{ int key;
if( kbhit( ) ) //如有按鍵輸入才執行下面操作
{ key=getch( );
if (key==224) //值為224表示按下了方向鍵,下面要再次獲取鍵值
{ key=getch( );
if(key==72dir!=2)dir=1; //72表示按下了向上方向鍵
if(key==80dir!=1)dir=2; //80為向下
if(key==75dir!=4)dir=3; //75為向左
if(key==77dir!=3)dir=4; //77為向右
}
if (key==32)
{ while(1) if((key=getch( ))==32) break; } //32為空格鍵,這兒用來暫停
}
if (Flag==0) //如沒吃食物,才執行下面操作擦掉蛇尾
{ gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf(” “); }
int i;
for (i = snk.len – 1; i 0; i–) //從蛇尾起每節存儲前一節坐標值(蛇頭除外)
{ snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; }
switch (dir) //判斷蛇頭該往哪個方向移動,並獲取最新坐標值
{ case 1: snk.y[0]–; break; //dir=1要向上移動
case 2: snk.y[0]++; break; //dir=2要向下移動
case 3: snk.x[0]-=2; break; //dir=3要向左移動
case 4: snk.x[0]+=2; break; //dir=4要向右移動
}
setColor(9, 0);
gtxy(snk.x[0], snk.y[0]); printf(“■”); //列印蛇頭
if (snk.x[0] == fod.x snk.y[0] == fod.y) //如吃到食物則執行以下操作
{ printf(“\007”); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //007是響鈴
else Flag = 0; //沒吃到食物Flag的值為0
if(snk.speed150) snk.speed= snk.speed+5; //作弊碼,不讓速度無限加快
}
void putFod( ) //投放食物
{ if (Flag == 1) //如吃到食物才執行以下操作,生成另一個食物
{ while (1)
{ int i,n= 1;
srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )
fod.x = rand( ) % (W – 4) + 2; //產生在遊戲框範圍內的一個x坐標值
fod.y = rand( ) % (H – 2) + 1; //產生在遊戲框範圍內的一個y坐標值
for (i = 0; i snk.len; i++) //隨機生成的食物不能在蛇的身體上
{ if (fod.x == snk.x[i] fod.y == snk.y[i]) { n= 0; break;} }
if (n fod.x % 2 == 0) break; //n不為0且橫坐標為偶數,則食物坐標取值成功
}
setColor(12, 0);
gtxy(fod.x, fod.y); printf(“●”); //游標到取得的坐標處列印食物
}
return;
}
int Over( ) //判斷遊戲是否結束的函數
{ int i;
setColor(7, 0);
gtxy(2,H+1); printf(「暫停鍵:space.」); //以下列印一些其它信息
gtxy(2,H+2); printf(「遊戲得分:%d」,score);
if (snk.x[0] == 0 || snk.x[0] == W) return 1; //蛇頭觸碰左右邊界
if (snk.y[0] == 0 || snk.y[0] == H) return 1; //蛇頭觸碰上下邊界
for (i = 1; i snk.len; i++)
{ if (snk.x[0] == snk.x[i] snk.y[0] == snk.y[i]) return 1; } //蛇頭觸碰自身
return 0; //沒碰到邊界及自身時就返回0
}
void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)
{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute( handle, ForeColor + BackGroundColor * 0x10 );
} //用來設定顏色的函數
原創文章,作者:XGGZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139618.html