『壹』 c語言小游戲代碼

「貪吃蛇」C代碼,在dev C++試驗通過(用4個方向鍵控制)

#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]; //蛇身某節x坐標

int y[100]; //蛇身某節y坐標

}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 Color(int a); //設定顯示顏色的函數

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個位置

{Color(2); //設定列印顏色為綠色

gtxy(i,0); printf("■"); //列印上邊框

gtxy(i,H); printf("■"); //列印下邊框

}

for(i=1;i<H;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的倍數(為偶數)

}

Color(12); //設定列印顏色為淡紅

gtxy(fod.x,fod.y); printf("●"); //到食物坐標處列印初試食物

snk.len=3; //蛇身長初值為3節

snk.speed=350; //刷新蛇的時間,即移動速度初值為350毫秒

snk.x[0]=W/2+1; //蛇頭橫坐標要為偶數(因為W/2=39)

snk.y[0]=H/2; //蛇頭縱坐標

Color(9); //設定列印顏色為淡藍

gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭

for(i=1;i<snk.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("■"); //列印蛇身

}

Color(7, 0); //恢復默認的白字黑底

return;

}

void keymove( ) //按鍵操作移動蛇

{ int key;

if( kbhit( ) ) //如有按鍵輸入才執行下面操作

{ key=getch( );

if (key==224) //值為224表示按下了方向鍵,下面要再次獲取鍵值

{ key=getch( );

if(key==72&&dir!=2)dir=1; //72表示按下了向上方向鍵

if(key==80&&dir!=1)dir=2; //80為向下

if(key==75&&dir!=4)dir=3; //75為向左

if(key==77&&dir!=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要向右移動

}

Color(9);

gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭

if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物則執行以下操作

{ printf("7"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //7是響鈴

else Flag = 0; //沒吃到食物Flag的值為0

if(snk.speed<150) 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且橫坐標為偶數,則食物坐標取值成功

}

Color(12); //設定字元為紅色

gtxy(fod.x, fod.y); printf("●"); //游標到取得的坐標處列印食物

}

return;

}

int Over( ) //判斷游戲是否結束的函數

{ int i;

Color(7);

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 Color(int a) //設定顏色的函數

{ SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a ); }

『貳』 C語言寫游戲

voidgotoxy(intx,inty)//定位到第y行的第x列
{
intxx=0x0b;
HANDLEhOutput;
COORDloc;
loc.X=x;
loc.Y=y;
hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput,loc);
}

使用這個函數定位到相應位置清除原有內容

『叄』 跪求c語言游戲源碼(完全版)

大一編的掃雷(完整),一百多行,Turbo C下編譯成功 #include<stdio.h> #include<conio.h> #include<time.h> void adjust(int*,int*); int a[23][23],c[22][22],mm,nn; int roundmine(int,int); void spread(); main() { int i,j,b[22][22],minenum,mine; int x,y,yy,s; char g,h,z; int*x1; int*y1; time_t t; again:srand((unsigned) time(&t)); textcolor(LIGHTGREEN); for(i=2;i<=21;i++) for(j=2;j<=21;j++) { gotoxy(i,j); putch(219); b[i][j]=1; c[i][j]=1; } minenum=0; for(i=1;i<=22;i++) for(j=1;j<=22;j++) { a[i][j]=0; if(i>1&&i<22&j>1&&j<22) {if((s=rand()%10)>0) a[i][j]=0; else if(s==0) a[i][j]=1; } if(a[i][j]) minenum++; } gotoxy(50,2); puts("dirction"); gotoxy(50,3); puts("SPACE:mark"); gotoxy(50,4); puts("ENTER:dig"); gotoxy(50,8); printf("mine num:%4d",minenum); gotoxy(50,5); printf("ESC:exit"); gotoxy(30,15); puts(" "); gotoxy(30,20); puts(" "); mine=minenum; gotoxy(2,2); x=2;y=2; while(mine) { h=getch(); if(h=='H') gotoxy(x,--y); else if(h=='P') gotoxy(x,++y); else if(h=='K') gotoxy(--x,y); else if(h=='M') gotoxy(++x,y); x1=&x;y1=&y; adjust(x1,y1); if(h==' ') { if(c[wherex()][wherey()]) if(b[wherex()][wherey()]) { textcolor(LIGHTRED); putch(16); mine--; gotoxy(59,8); printf("%4d",mine); gotoxy(x,y); b[wherex()][wherey()]=0; } else { textcolor(LIGHTGREEN); putch(219); mine++; gotoxy(59,8); printf("%4d",mine); gotoxy(x,y); b[wherex()][wherey()]=1; } } if(h=='\015') { mm=wherex();nn=wherey(); c[wherex()][wherey()]=0; if(a[wherex()][wherey()]) { for(i=2;i<=21;i++) for(j=2;j<=21;j++) {gotoxy(i,j); if(a[i][j]) {textcolor(LIGHTRED); putch(017); } } break; } else {spread();gotoxy(mm,nn);} } if(h=='\033') exit(0); } yy=1; for(i=2;i<=21;i++) for(j=2;j<=21;j++) if (a[i][j]==1&&b[i][j]==1) {gotoxy(30,15); cprintf("You lose!!"); yy=0; } if(yy) {gotoxy(30,15); cprintf("You win!!"); } gotoxy(30,20); cprintf("Once again(y/n)?"); z=getch(); if(z=='y') goto again; } void adjust(int* x,int* y) { if(*x<2) gotoxy(*x+=20,*y); else if(*x>21) gotoxy(*x-=20,*y); else if(*y<2) gotoxy(*x,*y+=20); else if(*y>21) gotoxy(*x,*y-=20); } int roundmine(int x,int y) { int i,j,r=0; for(i=x-1;i<=x+1;i++) for(j=y-1;j<=y+1;j++) if(a[i][j]) r++; return r; } void spread() { int r,i,j,x,y; x=wherex(); y=wherey(); r=roundmine(x,y); if(r) {printf("%d",r);c[x][y]=0;} else if(r==0&&x>1&&x<22&&y>1&&y<22) { putchar(' ');c[x][y]=0; for(i=x-1;i<=x+1;i++) for(j=y-1;j<=y+1;j++) if(x>1&&x<22&&y>1&&y<22&&c[i][j]) {gotoxy(i,j); spread(); } } }

『肆』 怎樣用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;i<H;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;i<snk.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==72&&dir!=2)dir=1; //72表示按下了向上方向鍵

if(key==80&&dir!=1)dir=2; //80為向下

if(key==75&&dir!=4)dir=3; //75為向左

if(key==77&&dir!=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("07"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //007是響鈴

else Flag = 0; //沒吃到食物Flag的值為0

if(snk.speed<150) 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 );

} //用來設定顏色的函數

『伍』 求一篇1000字左右c語言之猜數游戲論文~!!!急用。。希望大家幫幫

我們現在來做一個<猜數字>游戲...
游戲規則參照文曲星里的猜數字:

輸入四入不重復的數字(中間用空格隔開)按<回車>後結果顯示在後邊,
形式為 " ? A ? B", 四個數中位置和數字都正確為 A,數字相同位置不同為 B,
當 4 A 0 B 時為猜對,每一局有8次機會.

如:原四個數為1234,則
1234 4 A 0 B
5678 0 A 0 B 沒有一個對.
1243 2 A 2 B 3,4雖對但位置錯.

明白了規則後,下手就容易了,也許你還沒頭緒,沒關系,一步一步來.

1.首先明白自己的游戲要做什麼?
由玩家輸入四個數字,驗證這四個數和正確答案的關系,提供一個" X A X B"的
提示給玩家,再輸入...直至玩家猜對或到達八次.

2.游戲需要什麼資源?
這個游戲並不需要什麼特別的,只要一個printf,和scanf獲得輸入.

所以程序開頭:

#include <stdio.h>
加入標准輸入輸出,沒有它Turbo C不知道printf和scanf在哪來.

好,程序設計開始...

main(){
}

先把這個函數寫下來,這個叫主函數,一個程序就只有一個,也稱為程序入口函數,
你的程序就是從這里開始執行的.(是不是有點廢話?)

(以下操作都在main()中)
設定四個變數儲存正確答案:(也可以結個初值)
int a1,a2,a3,a4;
再設定四個變數諸存玩家的輸入:
int b1,b2,b3,b4;
設定一個變數諸存猜的次數並賦初值:
int n = 0;
設定兩個變數諸存結果A,B的個數:
int cA,cB;

准備工作完成,設定正確答案:
a1 = 3;
a2 = 5;
a3 = 9;
a4 = 7;
(當然你會抱怨正確答案是固定的,不要緊,下面會告訴你怎麼產生隨機的效果,慢慢來.)

仔細想一想整個游戲流程...
大概是這樣的:

循環執行:
輸入;
對比正確答案;
輸出提示;
判斷是否猜對;
是:顯示勝利並退出循環,否:不理會;
次數加1;
判斷次數是否超出;
是:顯示失敗並退出循環;
循環結束;

那麼,為了更容易理解,我們使用死循環,但要注意一點:裡面必須有使循環結束的語句!
break;就是這個語句.

那麼:

while(1){
...
break;
...
}

就寫下吧.while(XX){YYYY}是這樣工作的:
XX是不是0 (真)
不是:
執行 YYYY
是:退出循環
再檢查XX是不是不為0
...
不過你必須明確:break;會強制退出循環.

好,就這樣:

printf("\n\t Guess Numbers!\n\n"); /*列印一點提示信息*/
while(1){ /*開始用戶的輸入和程序輸出*/
printf("%d: ",n+1); /*列印當前是第幾次輸入*/
scanf("%d %d %d %d",&b1,&b2,&b3,&b3);
/*先不要知道為什麼要在b1,b2這前加&,先認為,scanf就要這樣*/
cA=0;
cB=0; /*對比就要開始,先把結果置0*/

/*對比開始,我們用一堆if來為我們做事*/
/*雖然這有點累贅,但誰叫我們是初學者呢?不過告訴你,這種表達效率是最高的*/
if(a1 == b1) cA++;
if(a2 == b2) cA++;
if(a3 == b3) cA++;
if(a4 == b4) cA++; /*逐個檢查增加A的數量*/

if(a1 == b2 || a1 == b3 || a1 == b4) cB++;
if(a2 == b1 || a2 == b3 || a2 == b4) cB++;
if(a3 == b1 || a3 == b2 || a3 == b4) cB++;
if(a4 == b1 || a4 == b2 || a4 == b3) cB++;
/*窮舉檢查得到B的數量*/
/*當然,你必須保證玩家輸入的都不一樣,不然就會鬧出笑話*/
/*檢查對比結束*/

/*列印提示*/
printf("\t\t%d A %d B\n",cA,cB);
/*判斷是否勝利*/
if(cA == 4){
printf("\n\tWell Done!\n");
getch(); /*getch()的功能是輸入一個字元,不需要回車,也不會顯示到屏幕*/
/*通常用來暫停程序*/
break; /*退出循環*/
}
/*次數加一*/
n++;
/*判斷次數*/

『陸』 c語言游戲編程

你錯了~ 理論上說,其他語言做到的c語言一定能夠做到~而且效率高得多,只不過其他語言一句話就能做到的,C語言可能要上百行代碼~ c語言時代,一個大軟體 動輒幾十萬行,幾百萬行代碼,其中出一個錯誤,是絕對令人抓狂的,所以有c++,java,。net 等應運而生~ linux 系統是純c語言寫的哦~ 也能有vista 那樣美的圖形用戶界面~ 發明c語言的人真的很了不起~ 從匯編的角度看C語言是垃圾,從C語言的角度看其他語言,同樣是垃圾~
其中也包括了懷舊的 MAX 3 界面(3DSMaxR3.cui)。當然如果你有足夠的時間和耐心,也可以自己設計...

『柒』 用c語言編寫小游戲

可以在那個main函數結尾加上一個getch(),注意這句話是在return前面一句,然後生成的EXE文件就可以運行了,不然的話,運行出結果後會很快窗口消失掉的。

『捌』 c語言游戲

貪吃蛇

#define N 200/*定義全局常量*/
#define m 25
#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define Esc 0x011b
int i,j,key,k;
struct Food/*構造食物結構體*/
{
int x;
int y;
int yes;
}food;
struct Goods/*構造寶貝結構體*/
{
int x;
int y;
int yes;
}goods;
struct Block/*構造障礙物結構體*/
{
int x[m];
int y[m];
int yes;
}block;
struct Snake{/*構造蛇結構體*/
int x[N];
int y[N];
int node;
int direction;
int life;
}snake;
struct Game/*構建游戲級別參數體*/
{
int score;
int level;
int speed;
}game;
/*定義函數*/
void init(void);/*定義圖形驅動*/
void close(void);/*定義關閉函數*/
void drawk(void);/*定義界面函數*/
void gameover(void);/*定義游戲結束函數*/
void gameplay(void);/*定義游戲主函數*/
void prscore(void);/*定義得分函數*/

void main(void){/*主函數體,調用以下四個函數*/
init();
setbkcolor(7);
drawk();
gameplay();
close();
}

void init(void){/*構建圖形驅動函數*/
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
cleardevice();
}

void drawk(void){/*構建游戲界面函數*/
/*setbkcolor(LIGHTGREEN);*/
char str3[50];
setfillstyle(SOLID_FILL,BLUE);/*條型邊框,顯示版本信息*/
bar3d(48,9,610,38,1,45);
setcolor(YELLOW);/*版本信息*/
sprintf(str3,"Version:5.01,Powerwing Studio");
outtextxy(330,20,str3);
setfillstyle(LTSLASH_FILL,YELLOW);/*設定牆邊的填充形式*/
bar3d(48,48,58,462,0,0);/*設定牆邊*/
bar3d(48,39,611,48,0,0);
bar3d(48,452,611,462,0,0);
bar3d(602,39,611,462,0,0);

}

void gameplay(void){/*構建游戲主函數*/
/*初始化游戲角色*/
randomize();/*隨機數發生器*/
goods.yes=1;
block.yes=1;
food.yes=1;/*場景中需建立新的食物*/
snake.life=1;/*初始化蛇生命值*/
snake.direction=1;/*蛇起始的移動方向定義為向右*/
snake.x[0]=100;snake.y[0]=100;/*蛇頭的位置坐標初始化*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*蛇初始化節數,共兩節只有蛇頭*/
/*初始化障礙物的數組*/
block.x[0]=170;block.y[0]=270;/*level 1*/
block.x[1]=410;block.y[1]=310;
block.x[2]=300;block.y[2]=200;
block.x[3]=320;block.y[3]=420;
block.x[4]=250;block.y[4]=350;
block.x[5]=220;block.y[5]=320;/*level 2*/
block.x[6]=310;block.y[6]=410;
block.x[7]=400;block.y[7]=500;
block.x[8]=230;block.y[8]=230;
block.x[9]=280;block.y[9]=280;
block.x[10]=170;block.y[10]=280;/*level 3*/
block.x[11]=420;block.y[11]=310;
block.x[12]=310;block.y[12]=200;
block.x[13]=320;block.y[13]=400;
block.x[14]=250;block.y[14]=260;/*level 4*/
block.x[15]=220;block.y[15]=330;
block.x[16]=130;block.y[16]=410;
block.x[17]=310;block.y[17]=510;
block.x[18]=230;block.y[18]=340;
block.x[19]=280;block.y[19]=380;
block.x[20]=270;block.y[20]=170;/*level 5*/
block.x[21]=410;block.y[21]=450;
block.x[22]=190;block.y[22]=200;
block.x[23]=150;block.y[23]=320;
block.x[24]=270;block.y[24]=350;
block.x[25]=340;block.y[25]=320;

game.score=0;
game.speed=50000;
game.level=1;
prscore();/*得分初始化*/
while(1){/*判斷為真可以按Esc退出循環結束游戲*/
while(!kbhit()){/*無按鍵按下時,蛇自己移動身體*/

if(game.level==1){/*畫出障礙物*/
for(j=0;j<5;j++){
setcolor(5);/**/
rectangle(block.x[j],block.y[j],block.x[j]+10,block.y[j]-10);
block.yes=0;
}
}
if(game.level==2){/*畫出障礙物*/
for(j=0;j<9;j++){
setcolor(5);/**/
rectangle(block.x[j],block.y[j],block.x[j]+10,block.y[j]-10);
block.yes=0;
}
}
if(game.level==3){/*畫出障礙物*/
for(j=0;j<14;j++){
setcolor(5);/**/
rectangle(block.x[j],block.y[j],block.x[j]+10,block.y[j]-10);
block.yes=0;
}
}
if(game.level==4){/*畫出障礙物*/
for(j=0;j<19;j++){
setcolor(5);/**/
rectangle(block.x[j],block.y[j],block.x[j]+10,block.y[j]-10);
block.yes=0;
}
}
if(game.level==5){/*畫出障礙物*/
for(j=0;j<25;j++){
setcolor(5);/**/
rectangle(block.x[j],block.y[j],block.x[j]+10,block.y[j]-10);
block.yes=0;
}
}
if(food.yes==1){/*需要畫出新的食物*/
food.x=rand()%400+60;/*獲得間隔60的隨機數食物坐標值*/
food.y=rand()%350+60;
while(food.x%10!=0)/*判斷坐標值是否滿足被10整除,否,自動增加*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*新的食物已經產生*/
}

if(goods.yes==1){/*需要畫出新的寶物*/
goods.x=rand()%380+60;/*獲得間隔60的隨機數寶貝坐標值*/
goods.y=rand()%320+80;
while(goods.x%10!=0)/*判斷坐標值是否滿足被10整除,否,自動增加*/
goods.x++;
while(goods.y%10!=0)
goods.y++;
goods.yes=0;/*新的寶貝已經產生*/
}
if(goods.yes==0){/*新寶貝產生,應顯示出來*/

setcolor(0);/*擦除*/
rectangle(goods.x,goods.y,goods.x+10,goods.y-10);
delay(50);/*延時*/
setcolor(YELLOW);
goods.x=goods.x+random(10)-random(20);/*隨機數增量*/
goods.y=goods.y+random(10)-random(20);
while(goods.x%10!=0)/*判斷變化後的坐標值是否滿足被10整除,否,自動增加*/
goods.x++;
while(goods.y%10!=0)
goods.y++;
rectangle(goods.x,goods.y,goods.x+10,goods.y-10);/*重畫出寶貝*/
if(goods.x<65||goods.x>585||goods.y<65|goods.y>445){/*判定寶貝是否越界*/
setcolor(0);/*擦除越界的寶貝*/
rectangle(goods.x,goods.y,goods.x+10,goods.y-10);
goods.yes=1;/*越界後重新生成寶貝*/
}

}

if(food.yes==0){/*新食物產生,應顯示出來*/
setcolor(GREEN);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設定當前線型*/
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];
}
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<snake.node;i++){/*超過4節後,判斷蛇自身碰撞*/
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){/*即自身的任一節坐標值與蛇頭坐標相等*/
for(i=1;i<snake.node-1;i++){/*擦除自己碰撞後位置蛇的身子*/
setcolor(0);
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
}
snake.life-=1;/*生命值減少一*/
snake.node-=5;
prscore();/*輸出結果*/
if(snake.life==0){/*判斷生命值是否為0*/
gameover();/*游戲結束*/
break;/*退出內循環*/
}
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455){/*判斷蛇是否與牆體碰撞*/
for(i=1;i<snake.node-1;i++){/*擦除撞牆後位置蛇的身子*/
setcolor(0);
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
}
snake.x[0]=100;snake.y[0]=100;/*蛇頭的位置坐標重新初始化*/
snake.x[1]=110;snake.y[1]=100;
snake.direction=1;/*蛇起始的移動方向定義為向右*/
snake.life-=1;/*生命值減少一*/
snake.node-=5;/*相應節數減少5節*/
prscore();
if(snake.life==0){
gameover();
break;
}
}
/*判斷蛇與障礙物碰撞,食物是否與障礙物重疊*/
if(game.level==1){/*判斷級別,並設定相應的障礙物數量,即數組個數*/
k=5;
}
else if(game.level==2){
k=9;
}
else if(game.level==3){
k=14;
}
else if(game.level==4){
k=19;
}
else if(game.level==5){
k=25;
}
for(j=0;j<k;j++){
if(snake.x[0]==block.x[j]&&snake.y[0]==block.y[j]){
for(i=1;i<snake.node-1;i++){/*擦除撞牆後位置蛇的身子*/
setcolor(0);
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
}
if(food.x==block.x[j]&&block.y[j]==food.y){/*防止障礙物與食物重疊*/
setcolor(0);/*設定食物的顏色為背景色,即擦除*/
rectangle(food.x,food.y,food.x+10,food.y-10);
food.yes=1;/*食物重新生成*/
}
snake.x[0]=100;snake.y[0]=100;/*蛇頭的位置坐標重新初始化*/
snake.x[1]=110;snake.y[1]=100;
snake.direction=1;/*蛇起始的移動方向定義為向右*/
snake.life-=1;
snake.node-=5;
prscore();
if(snake.life==0){
gameover();
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++;/*蛇身增加一節*/
if(snake.node>2){/*當節數每增加5節生命值增加一*/
snake.life=1+fabs((snake.node-2)/5);
}
food.yes=1;/*場景需要增加食物*/
game.score+=20;/*加分*/
prscore();/*輸出得分*/
}
if(snake.x[0]==goods.x&&snake.y[0]==goods.y){/*判定蛇是否得到寶貝*/
setcolor(0);/*設定寶貝的顏色為背景色,即擦除*/
rectangle(goods.x,goods.y,goods.x+10,goods.y-10);
goods.yes=1;/*場景需要增加新的寶貝*/
game.score+=100;/*得到寶貝後加100分*/
prscore();/*輸出得分*/
}

if(game.score<500){/*設定游戲速度和難度級別*/
game.speed=50000;
game.level=1;}
else if(game.score>=500&&game.score<1000){
game.level=2;
game.speed=40000;}
else if(game.score>=1000&&game.score<1500){
game.level=3;
game.speed=30000;}
else if(game.score>=1500&&game.score<2000){
game.level=4;
game.speed=20000; }
else if(game.score>=5000){
game.level=5;
game.speed=10000;}

setcolor(4);/*畫出移動的蛇*/
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設定當前線型*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
delay(game.speed);
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==0)/*判斷循環結束條件:蛇死或者檢測到Esc按鍵*/
break;

key=bioskey(0);/*判斷按鍵*/
if(key==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);/*列印出「Game Over」字樣*/
settextstyle(0,0,4);
outtextxy(200,200,"Game Over!");
getch();
}

void prscore(void){/*定義分數輸出函數*/
char str1[10];
char str2[10];
char str4[20];
setfillstyle(SOLID_FILL,BLUE);/*用於清除舊的顯示信息*/
bar(49,10,320,37);
setcolor(WHITE);
settextstyle(0,0,1);
sprintf(str1,"score:%d",game.score);/*輸出得分*/
outtextxy(55,20,str1);
sprintf(str2,"level:%d",game.level);/*輸出級別*/
outtextxy(250,20,str2);
sprintf(str4,"life:%d",snake.life);/*輸出級別*/
outtextxy(150,20,str4);
}

void close(void){/*定義關閉函數,退出圖形模式*/
getch();
closegraph();
}

『玖』 求一個用C語言編寫的小游戲代碼

/*也不知道你是什麼級別的,我是一個
新手
,剛接觸
編程語言
,以下是我自己變得一個小
程序
,在所有c語言的編譯器(vc++6.0、turbo…………)上都能運行,你還可以進一步改進。這是一個類似
貪吃蛇

小游戲

祝你好運
*/
/*貪吃蛇*/
#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<stdlib.h>
int
head=3
,tail=0;
int
main()
{
int
i,j,k=0;
int
zuobiao[2][80];
long
start;
int
direction=77;
int
gamespeed;
int
timeover;
int
change(char
qipan[20][80],int
zuobiao[2][80],char
direction);
zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4;
/*處理棋盤*/
char
qipan[20][80];//
定義
棋盤
for(i=0;i<20;i++)
for(j=0;j<80;j++)
qipan[i][j]='
';//
初始化
棋盤
for(i=0;i<80;i++)
qipan[0][i]='_';
for(i=0;i<20;i++)
qipan[i][0]='|';
for(i=0;i<20;i++)
qipan[i][79]='|';
for(i=0;i<80;i++)
qipan[19][i]='_';
qipan[1][1]=qipan[1][2]=qipan[1][3]='*';//初始化蛇的位置
qipan[1][4]='#';
printf("This
is
a
game
of
a
SNAKE.
GOOD
LUCK
TO
YOU
!
");
printf("Input
your
game
speed,please.(e.g.300)
");
scanf("%d",&gamespeed);
while(direction!='q')
{
system("cls");
for(i=0;i<20;i++)//列印出棋盤
for(j=0;j<80;j++)
printf("%c",qipan[i][j]);
timeover=1;
start=clock();
while(!kbhit()&&(timeover=clock()-start<=gamespeed));
if(timeover)
{
getch();
direction=getch();
}
else
direction=direction;
if(!(direction==72||direction==80||direction==75||direction==77))
{
return
0;
system("cls");
printf("GAME
OVER!
");
}
if(!change(qipan,zuobiao,direction))
{
direction='q';
system("cls");
printf("GAME
OVER!
");
}
}
return
0;
}
int
change(char
qipan[20][80],int
zuobiao[2][80],char
direction)
{
int
x,y;
if(direction==72)
x=zuobiao[0][head]-1;y=zuobiao[1][head];
if(direction==80)
x=zuobiao[0][head]+1;y=zuobiao[1][head];
if(direction==75)
x=zuobiao[0][head];y=zuobiao[0][head]-1;
if(direction==77)
x=zuobiao[0][head];y=zuobiao[1][head]+1;
if(x==0||x==18||y==78||y==0)
return
0;
if(qipan[x][y]!='
')
return
0;
qipan[zuobiao[0][tail]][zuobiao[1][tail]]='
';
tail=(tail+1)%80;
qipan[zuobiao[0][head]][zuobiao[1][head]]='*';
head=(head+1)%80;
zuobiao[0][head]=x;
zuobiao[1][head]=y;
qipan[zuobiao[0][head]][zuobiao[1][head]]='#';
return
1;
}

『拾』 如何用c語言編一個完整的游戲

可以看看windows的API啊,編界面的,如果只用命令行的話……orz……

手機游戲C不如java強大的說