//声明
#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++才有真正的类。
这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决。你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。下面的代码会实现一个猜拳游戏,让你与电脑对决。你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。
启动程序后,让用户出拳,截图:
用户出拳,显示对决结果:截图:
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char gamer// 玩家出拳
int computer// 电脑出拳
int result// 比赛结果
// 为了避免玩一次游戏就退出程序,可以将代码放在循环中
while (1){
printf("这是一个猜拳的小游戏,请输入你要出的拳头:\n")
printf("A:剪刀\nB:石头\nC:布\nD:不玩了\n")
scanf("%c%*c",&gamer)
switch (gamer){
case 65: //A
case 97: //a
gamer=4
break
case 66: //B
case 98: //b
gamer=7
break
case 67: //C
case 99: //c
gamer=10
break
case 68: //D
case 100: //d
return 0
default:
printf("你的选择为 %c 选择错误,退出...\n",gamer)
getchar()
system("cls")// 清屏
return 0
break
}
srand((unsigned)time(NULL))// 随机数种子
computer=rand()%3// 产生随机数并取余,得到电脑出拳
result=(int)gamer+computer// gamer 为 char 类型,数学运算时要强制转换类型
printf("电脑出了")
switch (computer)
{
case 0:printf("剪刀\n")break//4 1
case 1:printf("石头\n")break//7 2
case 2:printf("布\n")break //10 3
}
printf("你出了")
switch (gamer)
{
case 4:printf("剪刀\n")break
case 7:printf("石头\n")break
case 10:printf("布\n")break
}
if (result==6||result==7||result==11) printf("你赢了!")
else if (result==5||result==9||result==10) printf("电脑赢了!")
else printf("平手")
system("pause>nul&&cls")// 暂停并清屏
}
return 0
}
代码分析
1) 首先,我们需要定义3个变量来储存玩家出的拳头(gamer)、电脑出的拳头(computer)和最后的结果(result),然后给出文字提示,让玩家出拳。
接下来接收玩家输入:
scanf("%c%*c",&gamer)