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

Python014

使用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++才有真正的类。

刚刚的有点问题,现在改好了:\x0d\x0a#include\x0d\x0a#include\x0d\x0a#include\x0d\x0a#include\x0d\x0achar name[100],way[3][10]={"石头","剪子","布"},mode_name[2][20]={"三局两胜","五局三胜"}\x0d\x0avoid new_game(int mode,int *p_win,int * p_lose,int *p_tide){\x0d\x0achar cmd[10]\x0d\x0aint computer,user,win=0,lose=0\x0d\x0aint cnt[2]={3,5}\x0d\x0aprintf("***当前模式:\t%s\n",mode_name[mode])\x0d\x0afor(int i=0i

#include\x0d\x0a void move(char x,char y)\x0d\x0a {\x0d\x0a printf("%c-->%c\n",x,y)\x0d\x0a }\x0d\x0a void hanoi(int n,char one ,char two,char three)\x0d\x0a {\x0d\x0a if(n==1) move(one,three)\x0d\x0a else\x0d\x0a {\x0d\x0a hanoi(n-1,one,three,two)\x0d\x0a move(one,three)\x0d\x0a hanoi(n-1,two,one,three)\x0d\x0a }\x0d\x0a }\x0d\x0a main()\x0d\x0a {\x0d\x0a int m\x0d\x0a printf("input the number of disks:")\x0d\x0a scanf("%d",&m)\x0d\x0a printf("the step to moving %3d diskes:\n",m)\x0d\x0a hanoi(m,'A','B','C')\x0d\x0a }\x0d\x0a算法介绍:\x0d\x0a 其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n _ 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;\x0d\x0a 若n为奇数,按顺时针方向依次摆放 A C B。\x0d\x0a (1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。\x0d\x0a (2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。\x0d\x0a (3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。\x0d\x0a 所以结果非常简单,就是按照移动规则向一个方向移动金片:\x0d\x0a 如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C\x0d\x0a 汉诺塔问题也是程序设计中的经典递归问题,下面我们将给出递归和非递归的不同实现源代码。