使用C语言编写小游戏的方法是什么?

Python013

使用C语言编写小游戏的方法是什么?,第1张

//声明

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>

#include<windows.h>

#define SIZE 4

static int score=0

void putn(int n[][SIZE])

void getn(int n[][SIZE])

int isempty(int n[][SIZE])

int isfull(int n[][SIZE])

void math(int n[][SIZE],char c)

void tow(int n[][SIZE])

void toa(int n[][SIZE])

void tos(int n[][SIZE])

void tod(int n[][SIZE])

//主函数

int main()

{

int i,j

int n[SIZE][SIZE]

char c=' '

for(i=0i<SIZEi++)

{

for(j=0j<SIZEj++)

{

n[i][j]=0

}

}

printf( "***********************\n"

" 2048(%dX%d) \n"

" control:W/A/S/D \n"

"press any key to begin \n"

"***********************\n",SIZE,SIZE)

getch()

system("cls")

//n[0][1]=2048

//n[0][3]=2048

while(1)

{

if(isempty(n))

getn(n)

putn(n)

if(!isempty(n)&&isfull(n))

break

sleep(200)

c=getch()

while(c!='w'&&c!='a'&&c!='s'&&c!='d')

c=getch()

math(n,c)

system("cls")

}

printf(" Game Over!\n",score)

return 0

}

//函数

void putn(int n[][SIZE])

{

int i,j

for(i=0i<SIZEi++)

{

for(j=0j<SIZEj++)

printf("| ")

printf("|\n")

for(j=0j<SIZEj++)

{

if(n[i][j]==0)

printf("| ")

else

printf("|%4d ",n[i][j])

}

printf("|\n")

for(j=0j<SIZEj++)

printf("|_____")

printf("|\n")

}

printf("score: %d",score)

}

void getn(int n[][SIZE])

{

int a,b

a=rand()%SIZE

b=rand()%SIZE

while(n[a][b]!=0)

{

a=rand()%SIZE

b=rand()%SIZE

}

n[a][b]=2

}

int isempty(int n[][SIZE])

{

int i,j,count=0

for(i=0i<SIZEi++)

for(j=0j<SIZEj++)

if(n[i][j]==0)

count++

return count

}

int isfull(int n[][SIZE])

{

int i,j,count=0

for(i=0i<SIZEi++)

{

for(j=1j<SIZE-1j++)

{

if(n[i][j]==n[i][j+1]||n[i][j]==n[i][j-1])

count++

}

}

for(j=0j<SIZEj++)

{

for(i=1i<SIZE-1i++)

{

if(n[i][j]==n[i+1][j]||n[i][j]==n[i-1][j])

count++

}

}

return count>0?0:1

}

void math(int n[][SIZE],char c)

{

switch(c)

{

case 'w':tow(n)break

case 'a':toa(n)break

case 's':tos(n)break

case 'd':tod(n)break

default :

}

}

void tow(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(j=0j<SIZEj++)

{

for(a=0a<SIZEa++)

{

for(i=0i<SIZE-1i++)

{

if(n[i][j]==0)

{

n[i][j]=n[i+1][j]

n[i+1][j]=0

}

}

}

}

for(j=0j<SIZEj++)

{

for(a=0,i=0i<SIZEi++)

{

if(n[i][j]!=n[i+1][j]&&n[i][j]!=0||n[i][j]==2048)

{

m[a++]=n[i][j]

n[i][j]=0

}

else if(n[i][j]==n[i+1][j])

{

m[a++]=n[i][j]+n[i+1][j]

score+=m[a-1]

n[i][j]=0,n[i+1][j]=0

}

}

for(i=0i<SIZEi++)

{

n[i][j]=m[i]

m[i]=0

}

}

}

void toa(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(i=0i<SIZEi++)

{

for(a=0a<SIZEa++)

{

for(j=0j<SIZE-1j++)

{

if(n[i][j]==0)

{

n[i][j]=n[i][j+1]

n[i][j+1]=0

}

}

}

}

for(i=0i<SIZEi++)

{

for(a=0,j=0j<SIZEj++)

{

if(n[i][j]!=n[i][j+1]&&n[i][j]!=0||n[i][j]==2048)

{

m[a++]=n[i][j]

n[i][j]=0

}

else if(n[i][j]==n[i][j+1])

{

m[a++]=n[i][j]+n[i][j+1]

score+=m[a-1]

n[i][j]=0,n[i][j+1]=0

}

}

for(j=0j<SIZEj++)

{

n[i][j]=m[j]

m[j]=0

}

}

}

void tos(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(j=SIZE-1j>=0j--)

{

for(a=SIZE-1a>=0a--)

{

for(i=SIZE-1i>0i--)

{

if(n[i][j]==0)

{

n[i][j]=n[i-1][j]

n[i-1][j]=0

}

}

}

}

for(j=SIZE-1j>=0j--)

{

for(a=SIZE-1,i=SIZE-1i>=0i--)

{

if(n[i][j]!=n[i-1][j]&&n[i][j]!=0||n[i][j]==2048)

{

m[a--]=n[i][j]

n[i][j]=0

}

else if(n[i][j]==n[i-1][j])

{

m[a--]=n[i][j]+n[i-1][j]

score+=m[a+1]

n[i][j]=0,n[i-1][j]=0

}

}

for(i=SIZE-1i>=0i--)

{

n[i][j]=m[i]

m[i]=0

}

}

}

void tod(int n[][SIZE])

{

int i,j,a

int m[SIZE]

for(a=0a<SIZEa++)

m[a]=0

for(i=SIZE-1i>=0i--)

{

for(a=SIZE-1a>=0a--)

{

for(j=SIZE-1j>0j--)

{

if(n[i][j]==0)

{

n[i][j]=n[i][j-1]

n[i][j-1]=0

}

}

}

}

for(i=SIZE-1i>=0i--)

{

for(a=SIZE-1,j=SIZE-1j>=0j--)

{

if(n[i][j]!=n[i][j-1]&&n[i][j]!=0||n[i][j]==2048)

{

m[a--]=n[i][j]

n[i][j]=0

}

else if(n[i][j]==n[i][j-1])

{

m[a--]=n[i][j]+n[i][j-1]

score+=m[a+1]

n[i][j]=0,n[i][j-1]=0

}

}

for(j=SIZE-1j>=0j--)

{

n[i][j]=m[j]

m[j]=0

}

}

}

需要注意的是:

srand((unsigned) time(0)rand()是固定形式,不要更改任何一个字符!

如果不能编译,请把sleep(200)注释掉,如果提示不能找到system("cls")请把system("cls")更换为clrscr()。

c语言中没有类,只有结构,也可以像类一样编写,用结构,但其成员都是公开访问的,C++才有真正的类。

"扫雷"小游戏C代码

#include<stdio.h>

#include<math.h>

#include<time.h>

#include<stdlib.h>

main( )

{char a[102][102],b[102][102],c[102][102],w

int i,j /*循环变量*/

int x,y,z[999] /*雷的位置*/

int t,s /*标记*/

int m,n,lei /*计数*/

int u,v /*输入*/

int hang,lie,ge,mo /*自定义变量*/

srand((int)time(NULL)) /*启动随机数发生器*/

leb1:  /*选择模式*/

printf("\n   请选择模式:\n   1.标准  2.自定义\n")

scanf("%d",&mo)

if(mo==2)  /*若选择自定义模式,要输入三个参数*/

{do

{t=0printf("请输入\n行数 列数 雷的个数\n")

scanf("%d%d%d",&hang,&lie,&ge)

if(hang<2){printf("行数太少\n")t=1}

if(hang>100){printf("行数太多\n")t=1}

if(lie<2){printf("列数太少\n")t=1}

if(lie>100){printf("列数太多\n")t=1}

if(ge<1){printf("至少要有一个雷\n")t=1}

if(ge>=(hang*lie)){printf("雷太多了\n")t=1}

}while(t==1)

}

else{hang=10,lie=10,ge=10}  /*否则就是选择了标准模式(默认参数)*/

for(i=1i<=gei=i+1)  /*确定雷的位置*/

{do

{t=0z[i]=rand( )%(hang*lie)

for(j=1j<ij=j+1){if(z[i]==z[j]) t=1}

}while(t==1)

}

for(i=0i<=hang+1i=i+1)  /*初始化a,b,c*/

{for(j=0j<=lie+1j=j+1) {a[i][j]='1'b[i][j]='1'c[i][j]='0'} }

for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1) {a[i][j]='+'} }

for(i=1i<=gei=i+1)  /*把雷放入c*/

{x=z[i]/lie+1y=z[i]%lie+1c[x][y]='#'}

for(i=1i<=hangi=i+1)  /*计算b中数字*/

{for(j=1j<=liej=j+1)

{m=48

if(c[i-1][j-1]=='#')m=m+1if(c[i][j-1]=='#')m=m+1

if(c[i-1][j]=='#')m=m+1 if(c[i+1][j+1]=='#')m=m+1

if(c[i][j+1]=='#')m=m+1 if(c[i+1][j]=='#')m=m+1

if(c[i+1][j-1]=='#')m=m+1if(c[i-1][j+1]=='#')m=m+1

b[i][j]=m

}

}

for(i=1i<=gei=i+1)  /*把雷放入b中*/

{x=z[i]/lie+1y=z[i]%lie+1b[x][y]='#'}

lei=ge /*以下是游戏设计*/

do

{leb2:  /*输出*/

system("cls")printf("\n\n\n\n")

printf("    ")

for(i=1i<=liei=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c  ",w)

}

printf("\n   |")

for(i=1i<=liei=i+1){printf("---|")}

printf("\n")

for(i=1i<=hangi=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c |",w)

for(j=1j<=liej=j+1)

{if(a[i][j]=='0')printf("   |")

else printf(" %c |",a[i][j])

}

if(i==2)printf(" 剩余雷个数")

if(i==3)printf(" %d",lei)

printf("\n   |")

for(j=1j<=liej=j+1){printf("---|")}

printf("\n")

}

scanf("%d%c%d",&u,&w,&v) /*输入*/

u=u+1,v=v+1

if(w!='#'&&a[u][v]=='@')

goto leb2

if(w=='#')

{if(a[u][v]=='+'){a[u][v]='@'lei=lei-1}

else if(a[u][v]=='@'){a[u][v]='?'lei=lei+1}

else if(a[u][v]=='?'){a[u][v]='+'}

goto leb2

}

a[u][v]=b[u][v]

leb3:  /*打开0区*/

t=0

if(a[u][v]=='0')

{for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=1i<=hangi=i+1)

{for(j=liej>=1j=j-1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1   if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=hangi>=1i=i-1)

{for(j=1j<=liej=j+1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=hangi>=1i=i-1)

{for(j=liej>=1j=j-1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1  if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=1i<=hangi=i+1)  /*检测0区*/

{for(j=1j<=liej=j+1)

{if(a[i][j]=='0')

{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1

if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1

if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1

if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1

if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1

if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1

if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1

if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1

}

}

}

if(t==1)goto leb3

}

n=0 /*检查结束*/

for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1)

{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1}

}

}

while(a[u][v]!='#'&&n!=(hang*lie-ge))

for(i=1i<=gei=i+1)  /*游戏结束*/

{x=z[i]/lie+1y=z[i]%lie+1a[x][y]='#'}

printf("    ")

for(i=1i<=liei=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c  ",w)

}

printf("\n   |")

for(i=1i<=liei=i+1){printf("---|")}

printf("\n")

for(i=1i<=hangi=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c |",w)

for(j=1j<=liej=j+1)

{if(a[i][j]=='0')printf(" |")

else  printf(" %c |",a[i][j])

}

if(i==2)printf(" 剩余雷个数")

if(i==3)printf(" %d",lei)printf("\n   |")

for(j=1j<=liej=j+1) {printf("---|")}

printf("\n")

}

if(n==(hang*lie-ge)) printf("你成功了!\n")

else printf("    游戏结束!\n")

printf("    重玩请输入1\n")

t=0

scanf("%d",&t)

if(t==1)goto leb1

}

/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/

/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++6.0、turbo????)上都能运行,你还可以进一步改进。这是一个类似贪吃蛇的小游戏。祝你好运*/\x0d\x0a/*贪吃蛇*/\x0d\x0a#include\x0d\x0a#include\x0d\x0a#include\x0d\x0a#include\x0d\x0aint head=3 ,tail=0\x0d\x0aint main()\x0d\x0a{\x0d\x0aint i,j,k=0\x0d\x0aint zuobiao[2][80]\x0d\x0along start\x0d\x0aint direction=77\x0d\x0aint gamespeed\x0d\x0aint timeover\x0d\x0aint change(char qipan[20][80],int zuobiao[2][80],char direction)\x0d\x0azuobiao[0][tail]=1zuobiao[1][tail]=1zuobiao[0][1]=1zuobiao[1][1]=2zuobiao[0][2]=1zuobiao[1][2]=3zuobiao[0][head]=1zuobiao[1][head]=4\x0d\x0a/*处理棋盘*/\x0d\x0achar qipan[20][80]//定义棋盘\x0d\x0afor(i=0ifor(j=0jqipan[i][j]=' '//初始化棋盘\x0d\x0afor(i=0iqipan[0][i]='_'\x0d\x0afor(i=0iqipan[i][0]='|'\x0d\x0afor(i=0iqipan[i][79]='|'\x0d\x0afor(i=0iqipan[19][i]='_'\x0d\x0aqipan[1][1]=qipan[1][2]=qipan[1][3]='*'//初始化蛇的位置\x0d\x0aqipan[1][4]='#'\x0d\x0aprintf("This is a game of a SNAKE.\nGOOD LUCK TO YOU !\n")\x0d\x0aprintf("Input your game speed,please.(e.g.300)\n")\x0d\x0ascanf("%d",&gamespeed)\x0d\x0a\x0d\x0awhile(direction!='q')\x0d\x0a{\x0d\x0asystem("cls")\x0d\x0afor(i=0ifor(j=0jprintf("%c",qipan[i][j])\x0d\x0atimeover=1\x0d\x0astart=clock()\x0d\x0awhile(!kbhit()&&(timeover=clock()-startif(timeover)\x0d\x0a{\x0d\x0agetch()\x0d\x0adirection=getch()\x0d\x0a}\x0d\x0aelse\x0d\x0adirection=direction\x0d\x0aif(!(direction==72||direction==80||direction==75||direction==77))\x0d\x0a{\x0d\x0areturn 0\x0d\x0asystem("cls")\x0d\x0aprintf("GAME OVER!\n")\x0d\x0a}\x0d\x0aif(!change(qipan,zuobiao,direction))\x0d\x0a{\x0d\x0adirection='q'\x0d\x0asystem("cls")\x0d\x0aprintf("GAME OVER!\n")\x0d\x0a}\x0d\x0a}\x0d\x0areturn 0\x0d\x0a}\x0d\x0aint change(char qipan[20][80],int zuobiao[2][80],char direction)\x0d\x0a{\x0d\x0aint x,y\x0d\x0aif(direction==72)\x0d\x0ax=zuobiao[0][head]-1y=zuobiao[1][head]\x0d\x0aif(direction==80)\x0d\x0ax=zuobiao[0][head]+1y=zuobiao[1][head]\x0d\x0aif(direction==75)\x0d\x0ax=zuobiao[0][head]y=zuobiao[0][head]-1\x0d\x0aif(direction==77)\x0d\x0ax=zuobiao[0][head]y=zuobiao[1][head]+1\x0d\x0aif(x==0||x==18||y==78||y==0)\x0d\x0areturn 0\x0d\x0aif(qipan[x][y]!=' ')\x0d\x0areturn 0\x0d\x0aqipan[zuobiao[0][tail]][zuobiao[1][tail]]=' '\x0d\x0atail=(tail+1)%80\x0d\x0aqipan[zuobiao[0][head]][zuobiao[1][head]]='*'\x0d\x0ahead=(head+1)%80\x0d\x0azuobiao[0][head]=x\x0d\x0azuobiao[1][head]=y\x0d\x0aqipan[zuobiao[0][head]][zuobiao[1][head]]='#'\x0d\x0areturn 1\x0d\x0a}