c語言遊戲有哪些,c語言遊戲有哪些遊戲

本文目錄一覽:

C語言寫的小遊戲

這就是經典遊戲-掃雷 的代碼#include graphics.h

#include stdlib.h

#include dos.h

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define MOUSEMOVE 0xff08

struct

{

int num;

int roundnum;

int flag;

}Mine[10][10];

int gameAGAIN=0;

int gamePLAY=0;

int mineNUM;

char randmineNUM[3];

int Keystate;

int MouseExist;

int MouseButton;

int MouseX;

int MouseY;

void Init(void);

void MouseOn(void);

void MouseOff(void);

void MouseSetXY(int,int);

int LeftPress(void);

int RightPress(void);

void MouseGetXY(void);

void Control(void);

void GameBegain(void);

void DrawSmile(void);

void DrawRedflag(int,int);

void DrawEmpty(int,int,int,int);

void GameOver(void);

void GameWin(void);

int MineStatistics(int,int);

int ShowWhite(int,int);

void GamePlay(void);

void Close(void);

void main(void)

{

Init();

Control();

Close();

}

void Init(void)

{

int gd=DETECT,gm;

initgraph(gd,gm,”D:\\tc20\\BGI”);

}

void Close(void)

{

closegraph();

}

void MouseOn(void)

{

_AX=0x01;

geninterrupt(0x33);

}

void MouseOff(void)

{

_AX=0x02;

geninterrupt(0x33);

}

void MouseSetXY(int x,int y)

{

_CX=x;

_DX=y;

_AX=0x04;

geninterrupt(0x33);

}

int LeftPress(void)

{

_AX=0x03;

geninterrupt(0x33);

return(_BX1);

}

int RightPress(void)

{

_AX=0x03;

geninterrupt(0x33);

return(_BX2);

}

void MouseGetXY(void)

{

_AX=0x03;

geninterrupt(0x33);

MouseX=_CX;

MouseY=_DX;

}

void Control(void)

{

int gameFLAG=1;

while(1)

{

if(gameFLAG)

{

GameBegain();

GamePlay();

if(gameAGAIN==1)

{

gameAGAIN=0;

continue;

}

}

MouseOn();

gameFLAG=0;

if(LeftPress())

{

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)

{

gameFLAG=1;

continue;

}

}

if(kbhit())

break;

}

MouseOff();

}

void DrawSmile(void)

{

setfillstyle(SOLID_FILL,YELLOW);

fillellipse(290,75,10,10);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(285,75,2,2);

fillellipse(295,75,2,2);

setcolor(BLACK);

bar(287,80,293,81);

}

void DrawRedflag(int i,int j)

{

setcolor(7);

setfillstyle(SOLID_FILL,RED);

bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);

setcolor(BLACK);

line(198+j*20,95+i*20,198+j*20,95+i*20+10);

}

void DrawEmpty(int i,int j,int mode,int color)

{

setcolor(color);

setfillstyle(SOLID_FILL,color);

if(mode==0)

bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);

else

if(mode==1)

bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);

}

void GameBegain(void)

{

int i,j;

cleardevice();

if(gamePLAY!=1)

{

MouseSetXY(290,70);

MouseX=290;

MouseY=70;

}

gamePLAY=1;

mineNUM=0;

setfillstyle(SOLID_FILL,7);

bar(190,60,390,290);

for(i=0;i10;i++)

for(j=0;j10;j++)

DrawEmpty(i,j,0,8);

setcolor(7);

DrawSmile();

randomize();//__page_break__

for(i=0;i10;i++)

for(j=0;j10;j++)

{

Mine[i][j].num=random(8);

if(Mine[i][j].num==1)

mineNUM++;

else

Mine[i][j].num=2;

Mine[i][j].flag=0;

}

sprintf(randmineNUM,”%d”,mineNUM);

setcolor(1);

settextstyle(0,0,2);

outtextxy(210,70,randmineNUM);

mineNUM=100-mineNUM;

MouseOn();

}

void GameOver(void)

{

int i,j;

setcolor(0);

for(i=0;i10;i++)

for(j=0;j10;j++)

if(Mine[i][j].num==1)

{

DrawEmpty(i,j,0,RED);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(200+j*20,100+i*20,7,7);

}

}

void GameWin(void)

{

setcolor(11);

settextstyle(0,0,2);

outtextxy(230,30,”YOU WIN!”);

}

int MineStatistics(int i,int j)

{

int nNUM=0;

if(i==0j==0)

{

if(Mine[0][1].num==1)

nNUM++;

if(Mine[1][0].num==1)

nNUM++;

if(Mine[1][1].num==1)

nNUM++;

}

else

if(i==0j==9)

{

if(Mine[0][8].num==1)

nNUM++;

if(Mine[1][9].num==1)

nNUM++;

if(Mine[1][8].num==1)

nNUM++;

}

else

if(i==9j==0)

{

if(Mine[8][0].num==1)

nNUM++;

if(Mine[9][1].num==1)

nNUM++;

if(Mine[8][1].num==1)

nNUM++;

}

else

if(i==9j==9)

{

if(Mine[9][8].num==1)

nNUM++;

if(Mine[8][9].num==1)

nNUM++;

if(Mine[8][8].num==1)

nNUM++;

}

else if(j==0)

{

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(j==9)

{

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

}

else if(i==0)

{

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(i==9)

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

}

else

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

}//__page_break__

return (nNUM);

}

int ShowWhite(int i,int j)

{

if(Mine[i][j].flag==1||Mine[i][j].num==0)

return;

mineNUM–;

if(Mine[i][j].roundnum==0Mine[i][j].num!=1)

{

DrawEmpty(i,j,1,7);

Mine[i][j].num=0;

}

else

if(Mine[i][j].roundnum!=0)

{

DrawEmpty(i,j,0,8);

sprintf(randmineNUM,”%d”,Mine[i][j].roundnum);

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

Mine[i][j].num=0;

return ;

}

if(i!=0Mine[i-1][j].num!=1)

ShowWhite(i-1,j);

if(i!=0j!=9Mine[i-1][j+1].num!=1)

ShowWhite(i-1,j+1);

if(j!=9Mine[i][j+1].num!=1)

ShowWhite(i,j+1);

if(j!=9i!=9Mine[i+1][j+1].num!=1)

ShowWhite(i+1,j+1);

if(i!=9Mine[i+1][j].num!=1)

ShowWhite(i+1,j);

if(i!=9j!=0Mine[i+1][j-1].num!=1)

ShowWhite(i+1,j-1);

if(j!=0Mine[i][j-1].num!=1)

ShowWhite(i,j-1);

if(i!=0j!=0Mine[i-1][j-1].num!=1)

ShowWhite(i-1,j-1);

}

void GamePlay(void)

{

int i,j,Num;

for(i=0;i10;i++)

for(j=0;j10;j++)

Mine[i][j].roundnum=MineStatistics(i,j);

while(!kbhit())

{

if(LeftPress())

{

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)

{

MouseOff();

gameAGAIN=1;

break;

}

if(MouseX190MouseX390MouseY90MouseY290)

{

j=(MouseX-190)/20;

i=(MouseY-90)/20;

if(Mine[i][j].flag==1)

continue;

if(Mine[i][j].num!=0)

{

if(Mine[i][j].num==1)

{

MouseOff();

GameOver();

break;

}

else

{

MouseOff();

Num=MineStatistics(i,j);

if(Num==0)

ShowWhite(i,j);

else

{

sprintf(randmineNUM,”%d”,Num);

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

mineNUM–;

}

MouseOn();

Mine[i][j].num=0;

if(mineNUM1)

{

GameWin();

break;

}

}

}

}

}

if(RightPress())

{

MouseGetXY();

if(MouseX190MouseX390MouseY90MouseY290)

{

j=(MouseX-190)/20;

i=(MouseY-90)/20;

MouseOff();

if(Mine[i][j].flag==0Mine[i][j].num!=0)

{

DrawRedflag(i,j);

Mine[i][j].flag=1;

}

else

if(Mine[i][j].flag==1)

{

DrawEmpty(i,j,0,8);

Mine[i][j].flag=0;

}

}

MouseOn();

sleep(1);

}

}

}

使用c語言製作遊戲,如:貪吃蛇、黑白棋、推箱子等

# includestdio.h

# includestring.h

# includestdlib.h

# define SPA 0

# define MAN 1

# define COM 2 /* 空位置設為0 ,玩家下的位置設為1 ,電腦下的位置設為2 */

int qipan[15][15]; /* 15*15的棋盤 */

int a,b,c,d,x; /* a b為玩家下子坐標 ,c d為電腦下子坐標 x為剩餘空位置*/

void start(); /* 程序的主要控制函數 */

void draw(); /* 畫棋盤 */

int win(int p,int q); /* 判斷勝利 p q為判斷點坐標 */

void AI(int *p,int *q); /* 電腦下子 p q返回下子坐標 */

int value(int p,int q); /* 計算空點p q的價值 */

int qixing(int n,int p,int q); /* 返回空點p q在n方向上的棋型 n為1-8方向 從右順時針開始數 */

void yiwei(int n,int *i,int *j); /* 在n方向上對坐標 i j 移位 n為1-8方向 從右順時針開始數 */

void main()

{

char k;

do{

x=225;

start();

printf(“還要再來一把嗎?輸入y或n:”); getchar(); scanf(“%c”,k);

while(k!=’y’k!=’n’){

printf(“輸入錯誤,請重新輸入\n”); scanf(“%c”,k); }

system(“cls”); }while(k==’y’); printf(“謝謝使用!\n”);

}

void start()

{

int i,j,a1,b1,c1,d1,choice; /* a1 b1儲存玩家上手坐標 c1 d1儲存電腦上手坐標 */

char ch;

printf(“\t╔══════════════════════════════╗\n”); printf(“\t║ ║\n”); printf(“\t║ 歡迎使用五子棋對戰程序 祝您玩的愉快挑戰無極限 ║\n”); printf(“\t║ ║\n”); printf(“\t║ ._______________________. ║\n”); printf(“\t║ | _____________________ | ║\n”); printf(“\t║ | I I | ║\n”); printf(“\t║ | I 五 子 棋 I | ║\n”); printf(“\t║ | I I | ║\n”); printf(“\t║ | I made by 曉之蓬 I | ║\n”); printf(“\t║ | I___________________I | ║\n”); printf(“\t║ !_______________________! ║\n”); printf(“\t║ ._[__________]_. ║\n”); printf(“\t║ .___|_______________|___. ║\n”); printf(“\t║ |::: ____ | ║\n”); printf(“\t║ | ~~~~ [CD-ROM] | ║\n”); printf(“\t║ !_____________________! ║\n”); printf(“\t║ ║\n”); printf(“\t║ ║\n”); printf(“\t║ 寒 星 溪 月 疏 星 首,花 殘 二 月 並 白 蓮。 ║\n”); printf(“\t║ 雨 月 金 星 追 黑 玉,松 丘 新 宵 瑞 山 腥。 ║\n”); printf(“\t║ 星 月 長 峽 恆 水 流,白 蓮 垂 俏 雲 浦 嵐。 ║\n”); printf(“\t║ 黑 玉 銀 月 倚 明 星,斜 月 明 月 堪 稱 朋。 ║\n”); printf(“\t║ 二 十 六 局 先 棄 二,直 指 游 星 斜 彗 星。 ║\n”); printf(“\t║ ║\n”); printf(“\t║ ║\n”); printf(“\t║ 1.人機對戰 2.人人對戰 ║\n”); printf(“\t║ ║\n”); printf(“\t╚═══════════════════════════ ══╝\n”); printf(“\t\t\t請輸入1或2:”);

scanf(“%d”,choice); /* 選擇模式:人機或人人 */

while(choice!=1choice!=2) {

printf(“輸入錯誤,請重新輸入:”); scanf(“%d”,choice); }

if(choice==1){ /* 人機模式 */

system(“cls”);

printf(“歡迎使用五子棋人機對戰!下子請輸入坐標(如13 6)。悔棋請輸入15 1 5。\n\n\n”);

for(j=0;j15;j++)

for(i=0;i15;i++)

qipan[j][i]=SPA; /* 置棋盤全為空 */

draw();

printf(“先下請按1,後下請按2:”); scanf(“%d”,i);

while(i!=1i!=2) { printf(“輸入錯誤,請重新輸入:”); scanf(“%d”,i); }

if(i==1) { /* 如果玩家先手下子 */

printf(“請下子:”); scanf(“%d%d”,a,b);

while((a0||a14)||(b0||b14)) {

printf(“坐標錯誤!請重新輸入:”); scanf(“%d%d”,a,b); }

a1=a; b1=b; x–; qipan[b][a]=MAN; system(“cls”); draw();

}

while(x!=0){

if(x==225) {

c=7; d=7; qipan[d][c]=COM; x–; system(“cls”); draw(); } /* 電腦先下就下在7 7 */

else { AI(c,d); qipan[d][c]=COM; x–; system(“cls”); draw(); } /* 電腦下子 */

c1=c; d1=d; /* 儲存電腦上手棋型 */

if(win(c,d)){ /* 電腦贏 */

printf(“要悔棋嗎?請輸入y或n:”); getchar(); scanf(“%c”,ch);

while(ch!=’y’ch!=’n’) { printf(“輸入錯誤,請重新輸入:”);

scanf(“%c”,ch); }

if(ch==’n’) {

printf(“下不過電腦很正常,請不要灰心!!!\n”); return; }

else { x+=2; qipan[d][c]=SPA; qipan[b1][a1]=SPA;

system(“cls”); draw(); } /* 悔棋 */

}

printf(“電腦下在%d %d\n請輸入:”,c,d);

scanf(“%d%d”,a,b); /* 玩家下子 */

if(a==15b==15) {

x+=2; qipan[d][c]=SPA; qipan[b1][a1]=SPA; system(“cls”); draw();

printf(“請輸入:”); scanf(“%d%d”,a,b); } /* 悔棋 */

while((a0||a14)||(b0||b14)||qipan[b][a]!=SPA) {

printf(“坐標錯誤或該位置已有子!請重新輸入:”);

scanf(“%d%d”,a,b); }

a1=a; b1=b; x–; qipan[b][a]=MAN; system(“cls”); draw();

if(win(a,b)){ printf(“電腦神馬的都是浮雲!!!\n”);

return; } /* 玩家贏 */

}

printf(“和局\n”);

}

if(choice==2){

system(“cls”);

printf(“歡迎使用五子棋人人對戰!下子請輸入坐標(如13 6)。悔棋請輸入15 15。 \n\n\n”);

for(j=0;j15;j++)

for(i=0;i15;i++)

qipan[j][i]=SPA; /* 置棋盤全為空 */

draw();

while(x!=0){

printf(“1P請輸入:”); scanf(“%d%d”,a,b);

if(a==15b==15) {

x+=2; qipan[d][c]=SPA; qipan[b1][a1]=SPA; system(“cls”);

draw(); printf(“1P請輸入:”); scanf(“%d%d”,a,b); }

while((a0||a14)||(b0||b14)||qipan[b][a]!=SPA) {

printf(“坐標錯誤或該位置已有子!請重新輸入:”);

scanf(“%d%d”,a,b); }

a1=a; b1=b; x–; qipan[b][a]=MAN; system(“cls”); draw();

printf(“1P下在%d %d。\n”,a,b);

if(win(a,b)){ printf(“你真棒!!!\n”); return; } /* 玩家1贏 */

printf(“2P請輸入:”); scanf(“%d%d”,c,d);

if(c==15d==15) {

x+=2; qipan[b][a]=SPA; qipan[d1][c1]=SPA; system(“cls”); draw();

printf(“2P請輸入:”); scanf(“%d%d”,c,d); }

while((c0||c14)||(d0||d14)||qipan[d][c]!=SPA) {

printf(“坐標錯誤或該位置已有子!請重新輸入:”); scanf(“%d%d”,c,d);

}

c1=c; d1=d; x–; qipan[d][c]=COM; system(“cls”); draw();

printf(“2P下在%d %d。\n”,c,d);

if(win(c,d)){ printf(“你真棒!!!\n”); return; } /* 玩家2贏 */

}

printf(“和局\n”);

}

}

void draw() /* 畫棋盤 */

{

int i,j;

char p[15][15][4];

for(j=0;j15;j++)

for(i=0;i15;i++){

if(qipan[j][i]==SPA) strcpy(p[j][i],” \0″);

if(qipan[j][i]==MAN) strcpy(p[j][i],”●\0″);

if(qipan[j][i]==COM) strcpy(p[j][i],”◎\0″); }

printf(” 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \n”);

printf(” ┌—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┬—┐\n”);

for(i=0,j=0;i14;i++,j++){

printf(” %2d│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%d\n”,j,p[i][0],p[i][1],p[i][2],p[i][3],p[i][4],p[i][5],p[i][6],p[i][7],p[i][8],p[i][9],p[i][10],p[i][11],p[i][12],p[i][13],p[i][14],j);

printf(” ├—┼—┼—┼—┼—┼—┼—┼—┼—┼—┼—┼—┼—┼—┼—┤\n”); }

printf(” 14│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│0\n”,p[14][0],p[14][1],p[14][2],p[14][3],p[14][4],p[14][5],p[14][6],p[14][7],p[14][8],p[14][9],p[14][10],p[14][11],p[14][12],p[14][13],p[14][14]);

printf(” └—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┴—┘\n”);

printf(” 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \n”);

}

int win(int p,int q) /* 判斷勝利 p q為判斷點坐標,勝利返回1,否則返回0 */

{

int k,n=1,m,P,Q; /* k儲存判斷點p q的狀態COM或MAN。P Q儲存判斷點坐標。n為判斷方向。m為個數。 */

P=p; Q=q; k=qipan[q][p];

while(n!=5){

m=0;

while(k==qipan[q][p]){

m++; if(m==5) return 1;

yiwei(n,p,q); if(p0||p14||q0||q14) break;

}

n+=4; m-=1; p=P; q=Q; /* 轉向判斷 */

while(k==qipan[q][p]){

m++;

if(m==5) return 1;

yiwei(n,p,q); if(p0||p14||q0||q14) break;

}

n-=3; p=P; q=Q; /* 不成功則判斷下一組方向 */

}

return 0;

}

void AI(int *p,int *q) /* 電腦下子 *p *q返回下子坐標 */

{

int i,j,k,max=0,I,J; /* I J為下點坐標 */

for(j=0;j15;j++)

for(i=0;i15;i++)

if(qipan[j][i]==SPA){ /* 歷遍棋盤,遇到空點則計算價值,取最大價值點下子。 */

k=value(i,j); if(k=max) { I=i; J=j; max=k; }

}

*p=I; *q=J;

}

int value(int p,int q) /* 計算空點p q的價值 以k返回 */

{

int n=1,k=0,k1,k2,K1,K2,X1,Y1,Z1,X2,Y2,Z2,temp;

int a[2][4][4]={40,400,3000,10000,6,10,600,10000,20,120,200,0,6,10,500,0,30,300,2500,5000,2,8,300,8000,26,160,0,0,4,20,300,0}; /* 數組a中儲存己方和對方共32種棋型的值 己方0對方1 活0沖1空活2空沖3 子數0-3(0表示1個子,3表示4個子) */

while(n!=5){

k1=qixing(n,p,q); n+=4; /* k1,k2為2個反方向的棋型編號 */

k2=qixing(n,p,q); n-=3;

if(k1k2) { temp=k1; k1=k2; k2=temp; } /* 使編號小的為k1,大的為k2 */

K1=k1; K2=k2; /* K1 K2儲存k1 k2的編號 */

Z1=k1%10; Z2=k2%10; k1/=10; k2/=10; Y1=k1%10; Y2=k2%10; k1/=10; k2/=10;

X1=k1%10; X2=k2%10; /* X Y Z分別表示 己方0對方1 活0沖1空活2空沖3 子數0-3(0表示1個子,3表示4個子) */

if(K1==-1) {

if(K20) { k+=0; continue; } else k+=a[X2][Y2][Z2]+5; continue; }; /* 空棋型and其他 */

if(K1==-2) { if(K20) { k+=0; continue; }

else k+=a[X2][Y2][Z2]/2; continue; }; /* 邊界沖棋型and其他 */

if(K1==-3) { if(K20) { k+=0; continue; }

else k+=a[X2][Y2][Z2]/3; continue; }; /* 邊界空沖棋型and其他 */

if(((K1-1K14)((K2-1K24)||(K29K214)))||((K199K1104)((K299K2104)||(K2109K2114)))){

/* 己活己活 己活己沖 對活對活 對活對沖 的棋型賦值*/

if(Z1+Z2=2) { k+=a[X2][Y2][3]; continue; }

else { k+=a[X2][Y2][Z1+Z2+1]; continue; }

}

if(((K19K114)(K29K214))||((K1109K1114)(K2109K2114))){

/* 己沖己沖 對沖對沖 的棋型賦值*/

if(Z1+Z2=2) { k+=10000; continue; }

else { k+=0; continue; }

}

if(((K1-1K14)((K299K2104)||(K2109K2114)))||((K19K114)((K299K2104)||(K2109K2114)))){

/* 己活對活 己活對沖 己沖對活 己沖對沖 的棋型賦值*/

if(Z1==3||Z2==3) { k+=10000; continue; }

else { k+=a[X2][Y2][Z2]+a[X1][Y1][Z1]/4; continue; }

}

else

{ k+=a[X1][Y1][Z1]+a[X2][Y2][Z2]; continue; } /* 其他棋型的賦值 */

}

return k;

}

int qixing(int n,int p,int q) /* 返回空點p q在n方向上的棋型號 n為1-8方向 從右順時針開始數 */

{

int k,m=0; /* 棋型號註解: 己活000-003 己沖010-013 對活100-103 對沖110-113 己空活020-023 己空沖030-033 對空活120-123 對空沖130-133 空-1 邊界沖-2 邊界空沖-3*/

yiwei(n,p,q);

if(p0||p14||q0||q14) k=-2; /* 邊界沖棋型 */

switch(qipan[q][p]){

case COM:{

m++; yiwei(n,p,q);

if(p0||p14||q0||q14) { k=m+9; return k; }

while(qipan[q][p]==COM) {

m++; yiwei(n,p,q); if(p0||p14||q0||q14) { k=m+9; return k; }

}

if(qipan[q][p]==SPA) k=m-1; /* 己方活棋型 */

else k=m+9; /* 己方沖棋型 */

}break;

case MAN:{

m++; yiwei(n,p,q);

if(p0||p14||q0||q14) { k=m+109; return k; }

while(qipan[q][p]==MAN) {

m++; yiwei(n,p,q); if(p0||p14||q0||q14) { k=m+109; return k; }

}

if(qipan[q][p]==SPA) k=m+99; /* 對方活棋型 */

else k=m+109; /* 對方沖棋型 */

}break;

case SPA:{

yiwei(n,p,q);

if(p0||p14||q0||q14) { k=-3; return k; } /* 邊界空沖棋型 */

switch(qipan[q][p]){

case COM:{

m++; yiwei(n,p,q);

if(p0||p14||q0||q14) { k=m+29; return k; }

while(qipan[q][p]==COM) {

m++; yiwei(n,p,q);

if(p0||p14||q0||q14) { k=m+29; return k; }

}

if(qipan[q][p]==SPA) k=m+19; /* 己方空活棋型 */

else k=m+29; /* 己方空沖棋型 */

}break;

case MAN:{

m++; yiwei(n,p,q);

if(p0||p14||q0||q14) { k=m+129; return k; }

while(qipan[q][p]==MAN) {

m++; yiwei(n,p,q);

if(p0||p14||q0||q14) { k=m+129; return k; }

}

if(qipan[q][p]==SPA) k=m+119; /* 對方空活棋型 */

else k=m+129; /* 對方空沖棋型 */

}break;

case SPA: k=-1; break; /* 空棋型 */

}

}break;

}

return k;

}

void yiwei(int n,int *i,int *j) /* 在n方向上對坐標 i j 移位 n為1-8方向 從右順時針開始數 */

{

switch(n){

case 1: *i+=1; break;

case 2: *i+=1; *j+=1; break;

case 3: *j+=1; break;

case 4: *i-=1; *j+=1; break;

case 5: *i-=1; break;

case 6: *i-=1; *j-=1; break;

case 7: *j-=1; break;

case 8: *i+=1; *j-=1; break;

}

}

C語言可以寫哪些小遊戲?

C語言可以編手機遊戲. 你叫他去死 不過我這有 貪吃蛇的代碼,你倒可以看看 (用TC 編譯一定過)

#include

#include

#include

#include

#include

#define Enter 7181

#define ESC 283

#define UP 18432

#define DOWN 20480

#define LEFT 19200

#define RIGHT 19712

#ifdef __cplusplus

#define __CPPARGS …

#else

#define __CPPARGS

#endif

void interrupt (*oldhandler)(__CPPARGS);

void interrupt newhandler(__CPPARGS);

void SetTimer(void interrupt (*IntProc)(__CPPARGS));

void KillTimer(void);

void Initgra(void);

void TheFirstBlock(void);

void DrawMap(void);

void Initsnake(void);

void Initfood(void);

void Snake_Headmv(void);

void Flag(int,int,int,int);

void GameOver(void);

void Snake_Bodymv(void);

void Snake_Bodyadd(void);

void PrntScore(void);

void Timer(void);

void Win(void);

void TheSecondBlock(void);

void Food(void);

void Dsnkorfd(int,int,int);

void Delay(int);

struct Snake

{int x;int y;int color;}Snk[12];

struct Food

{int x;int y;int color;}Fd;

int flag1=1,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,

checkx,checky,num,key=0,Times,Score,Hscore,Snkspeed,TimerCounter,TureorFalse;

char Sco[2],Time[6];

void main()

{ Initgra();

SetTimer(newhandler);

TheFirstBlock();

while(1)

{DrawMap();

Snake_Headmv();

GameOver();

Snake_Bodymv();

Snake_Bodyadd();

PrntScore();

Timer();

Win();

if(key==ESC)

break;

if(key==Enter)

{cleardevice();

TheFirstBlock();

}

TheSecondBlock();

Food();

Delay(Snkspeed);

}

closegraph();

KillTimer();

}

void interrupt newhandler(__CPPARGS)

{

TimerCounter++;

oldhandler();

}

void SetTimer(void interrupt (*IntProc)(__CPPARGS))

{

oldhandler=getvect(0x1c);

disable();

setvect(0x1c,IntProc);

enable();

}

void KillTimer()

{

disable();

setvect(0x1c,oldhandler);

enable();

}

void Initgra()

{int gd=DETECT,gm;

initgraph(gd,gm,”d:\\tc”);

}

void TheFirstBlock()

{setcolor(11);

settextstyle(0,0,4);

outtextxy(100,220,”The First Block”);

loop:key=bioskey(0);

if(key==Enter)

{cleardevice();

Initsnake();

Initfood();

Score=0;

Hscore=1;

Snkspeed=10;

num=2;

Times=0;

key=0;

TureorFalse=1;

TimerCounter=0;

Time[0]=’0′;Time[1]=’0′;Time[2]=’:’;Time[3]=’1′;Time[4]=’0′;Time[5]=’\0′;

}

else if(key==ESC) cleardevice();

else goto loop;

}

void DrawMap()

{line(10,10,470,10);

line(470,10,470,470);

line(470,470,10,470);

line(10,470,10,10);

line(480,20,620,20);

line(620,20,620,460);

line(620,460,480,460);

line(480,460,480,20);

}

void Initsnake()

{randomize();

num=2;

Snk[0].x=random(440);

Snk[0].x=Snk[0].x-Snk[0].x%20+50;

Snk[0].y=random(440);

Snk[0].y=Snk[0].y-Snk[0].y%20+50;

Snk[0].color=4;

Snk[1].x=Snk[0].x;

Snk[1].y=Snk[0].y+20;

Snk[1].color=4;

}

void Initfood()

{randomize();

Fd.x=random(440);

Fd.x=Fd.x-Fd.x%20+30;

Fd.y=random(440);

Fd.y=Fd.y-Fd.y%20+30;

Fd.color=random(14)+1;

}

void Snake_Headmv()

{if(bioskey(1))

{key=bioskey(0);

switch(key)

{case UP:Flag(1,0,0,0);break;

case DOWN:Flag(0,1,0,0);break;

case LEFT:Flag(0,0,1,0);break;

case RIGHT:Flag(0,0,0,1);break;

default:break;

}

}

if(flag1)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].y-=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

if(flag2)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].y+=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

if(flag3)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].x-=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

if(flag4)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].x+=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

}

void Flag(int a,int b,int c,int d)

{flag1=a;flag2=b;flag3=c;flag4=d;}

void GameOver()

{int i;

if(Snk[0].x460||Snk[0].y460)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,”Game Over”);

loop1:key=bioskey(0);

if(key==Enter)

{cleardevice();

TheFirstBlock();

}

else

if(key==ESC)

cleardevice();

else

goto loop1;

}

for(i=3;inum;i++)

{if(Snk[0].x==Snk[i].xSnk[0].y==Snk[i].y)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,”Game Over”);

loop2:key=bioskey(0);

if(key==Enter)

{cleardevice();

TheFirstBlock();

}

else

if(key==ESC)

cleardevice();

else goto loop2;

}

}

}

void Snake_Bodymv()

{int i,s,t;

for(i=1;inum;i++)

{Dsnkorfd(checkx,checky,Snk[i].color);

Dsnkorfd(Snk[i].x,Snk[i].y,0);

s=Snk[i].x;

t=Snk[i].y;

Snk[i].x=checkx;

Snk[i].y=checky;

checkx=s;

checky=t;

}

}

void Food()

{if(flag5)

{randomize();

Fd.x=random(440);

Fd.x=Fd.x-Fd.x%20+30;

Fd.y=random(440);

Fd.y=Fd.y-Fd.y%20+30;

Fd.color=random(14)+1;

flag5=0;

}

Dsnkorfd(Fd.x,Fd.y,Fd.color);

}

void Snake_Bodyadd()

{if(Snk[0].x==Fd.xSnk[0].y==Fd.y)

{if(Snk[num-1].xSnk[num-2].x)

{num++;

Snk[num-1].x=Snk[num-2].x+20;

Snk[num-1].y=Snk[num-2].y;

Snk[num-1].color=Fd.color;

}

else

if(Snk[num-1].xSnk[num-2].x)

{num++;

Snk[num-1].x=Snk[num-2].x-20;

Snk[num-1].y=Snk[num-2].y;

Snk[num-1].color=Fd.color;

}

else

if(Snk[num-1].ySnk[num-2].y)

{num++;

Snk[num-1].x=Snk[num-2].x;

Snk[num-1].y=Snk[num-2].y+20;

Snk[num-1].color=Fd.color;

}

else

if(Snk[num-1].ySnk[num-2].y)

{num++;

Snk[num-1].x=Snk[num-2].x;

Snk[num-1].y=Snk[num-2].y-20;

Snk[num-1].color=Fd.color;

}

flag5=1;

Score++;

}

}

void PrntScore()

{if(Hscore!=Score)

{setcolor(11);

settextstyle(0,0,3);

outtextxy(490,100,”SCORE”);

setcolor(2);

setfillstyle(1,0);

rectangle(520,140,580,180);

floodfill(530,145,2);

Sco[0]=(char)(Score+48);

Sco[1]=’\0′;

Hscore=Score;

setcolor(4);

settextstyle(0,0,3);

outtextxy(540,150,Sco);

}

}

void Timer()

{if(TimerCounter18)

{Time[4]=(char)(Time[4]-1);

if(Time[4]’0′)

{Time[4]=’9′;

Time[3]=(char)(Time[3]-1);

}

if(Time[3]’0′)

{Time[3]=’5′;

Time[1]=(char)(Time[1]-1);

}

if(TureorFalse)

{setcolor(11);

settextstyle(0,0,3);

outtextxy(490,240,”TIMER”);

setcolor(2);

setfillstyle(1,0);

rectangle(490,280,610,320);

floodfill(530,300,2);

setcolor(11);

settextstyle(0,0,3);

outtextxy(495,290,Time);

TureorFalse=0;

}

if(Time[1]==’0’Time[3]==’0’Time[4]==’0′)

{setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,”Game Over”);

loop:key=bioskey(0);

if(key==Enter)

{cleardevice();

TheFirstBlock();

}

else if(key==ESC) cleardevice();

else goto loop;

}

TimerCounter=0;

TureorFalse=1;

}

}

void Win()

{if(Score==3)

Times++;

if(Times==2)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,”You Win”);

loop:key=bioskey(0);

if(key==Enter)

{cleardevice();

TheFirstBlock();

key=0;

}

else if(key==ESC) cleardevice();

else goto loop;

}

}

void TheSecondBlock()

{if(Score==3)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(100,220,”The Second Block”);

loop:key=bioskey(0);

if(key==Enter)

{cleardevice();

Initsnake();

Initfood();

Score=0;

Hscore=1;

Snkspeed=8;

num=2;

key=0;

}

else if(key==ESC) cleardevice();

else goto loop;

}

}

void Dsnkorfd(int x,int y,int color)

{setcolor(color);

setfillstyle(1,color);

circle(x,y,10);

floodfill(x,y,color);

}

void Delay(int times)

{int i;

for(i=1;i=times;i++)

delay(15000);

}

c語言可以做什麼遊戲,還需要什麼其他軟體?

1.基本上,大型遊戲引擎都不是C語言開發的。如果小遊戲的功能代碼的話,c沒問題,如果要好的界面,C要用gtk+,這個比較難;熟悉c++的話,用wxWidget和Qt寫界面會好用點。大型遊戲的話,還是要用專門的遊戲引擎設計,大型遊戲不是一個人能完成的。

2.遊戲開發主要涉及到ui和場景、對象管理的需求,c++相比c是更普遍的選擇;使用c++的遊戲框架、引擎也更多,移動端常見的cocos2d-x,面向3a開發的udk等都是最典型的例子。

用C語言編寫的小遊戲代碼是什麼?

「猜數字小遊戲」,每個數字後按空格,最後按回車確認

#includestdio.h

#includestdlib.h

#includetime.h

int a[4],b[4];

int count=0;  //計算猜測次數

void csh( );  //初始化

void start( );  //開始遊戲

int main( )

{ csh( );

start( );

}

void csh( )  //初始化

{ printf(“\n\n         猜  數  字  小  游  戲\n\n”);

printf(「    猜四個數字,如數字與順序都正確記為A,數字正確位置不對記為B.\n」);

}

void start( )  //開始遊戲

{int m,n;  //m是完全猜對的個數,n是順序不對的個數

while(1)

{srand((unsigned)time(NULL));  //初始化隨機數發生器srand( )

while(1) { for(int i=0;i4;i++) a[i]=rand( )%10;  //rand( )函數每次隨機產生一個0-9的數

if( (a[3]!=a[2]a[3]!=a[1]a[3]!=a[0])

(a[2]!=a[1]a[2]!=a[0])a[1]!=a[0] ) break; }  //4個隨機數各自不相等

printf(”    請依次輸入4個一位整數:\n\n   “);

while(1)

{for(int i=0;i4;i++) scanf(「%d」,b[i]);

printf(”    你輸入的是:%d  %d  %d  %d “,b[0],b[1],b[2],b[3]);

m=0;n=0;

for(int i=0;i4;i++)

{for(int j=0;j4;j++)

{ if(b[i]==a[j]i==j)m=m+1; if(b[i]==a[j]i!=j)n=n+1; }

}

count=count+1;

printf(”      %dA  %dB   你試了%d次\n   “,m,n,count);

if(m==4)break;

if(count==8){ count=0; break; }

}

printf(“\n”);

if(m==4)printf(”     你猜對了(^-^)! 就是:%d %d %d %d\n”,a[0],a[1],a[2],a[3]);

else printf(”     你輸了(T-T)!哈哈!應該是:%d %d %d %d\n”,a[0],a[1],a[2],a[3]);

int z;

printf(”     (要繼續嗎?1或0)\n   “);

scanf(「%d」,z);

if(z==0) break;

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254331.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 17:41
下一篇 2024-12-14 17:41

相關推薦

  • 為什麼不用Python開發遊戲

    Python是一種高級編程語言,擁有簡單易學、代碼簡潔等優點。同時,Python也是一種多用途的語言,可以用於Web開發、數據分析以及機器學習等領域。然而,對於遊戲開發領域,Pyt…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python通配符有哪些

    Python通配符是一種表示字元串中模糊匹配的有效工具,用於匹配與具有特定模式匹配的字元串。Python中主要的通配符有:*,?,[]和{}。 一、星號通配符 * 在Python中…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • 使用Python製作遊戲代碼

    Python是一種高級編程語言,因其簡潔明了的代碼風格、易於學習和使用而備受青睞。Python已經成為遊戲製作的熱門選擇之一,可以通過Pygame、Panda3D等工具來實現遊戲制…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 註冊表取證工具有哪些

    註冊表取證是數字取證的重要分支,主要是獲取計算機系統中的註冊表信息,進而分析痕迹,獲取重要證據。本文將以註冊表取證工具為中心,從多個方面進行詳細闡述。 一、註冊表取證工具概述 註冊…

    編程 2025-04-29

發表回復

登錄後才能評論