怎样用C语言编写一个猜拳游戏?

怎样用C语言编写一个猜拳游戏?,第1张

/*至搂主:本游戏系统可支持多个用户游戏,一次只能登录一个用户,运行此程序会生成一个文件来存储用户信息,本程序允许承载的用户个数为1000个,为使游戏更有趣味,程序特意为不同的玩家分数设计了不同的等级,程序初始化时,会生成一个只含有5个系统玩尘薯家的文件。游戏过程中,文件会不断刷新,如果玩家要删除一切曾经的游戏记录,只需将存储文件删除,存储记录的文件名为'sunyi',如果搂主想与我们联系,请加QQ好友865363864。(加好友时请搂主注明身份)。

*/

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

//#define NULL 0

/**************************************************************************************************************************/

struct computer //定义系统玩家结构体

{

char player[30]

int score

int times

int time

}cpt[1000]={"player1",100,1,1,"派姿者player2",100,1,1,"player3",100,1,1,"player4",100,1,1,"player5",100,1,1,}

FILE *in//生成记录玩家信息的文件的指针

int number,rool //rool:玩家所在数组位置的角标.number:数组元素的个数.

/****************************************************************************************************************************/

int h() //生成一个随机数(1,2或3);

{

int k,n

n=rand()%3

return n+1

}

/****************************************************************************************************************************/

int str_to_num(char a[]) //引入函数册尘str_to_num:使字符串(string)转化为整数数形式(int)!

{

int i=strlen(a)-1,num=0,time=1

for(i>=0i--)

{

num=num+(a[i]-'0')*time

time=time*10

}

return(num)

}

/*****************************************************************************************************************************/

void b(int n)

{

switch((int)(n/20))

{

case(0):printf("等级:江湖渣子")break

case(1):

case(2):printf("等级:初入江湖")break

case(3):

case(4):

case(5):printf("等级:江湖浪子")break

case(6):

case(7):

case(8):

case(9):printf("等级:江湖侠客")break

case(10):

case(11):

case(12):

case(13):

case(14):

case(15):

case(16):

case(17):

case(18):

case(19):printf("等级:一派掌门")break

default:

{

switch((int)(n/1000))

{

case(0):printf("等级:武林盟主")break

case(1):

case(2):

case(3):

case(4):printf("等级:江湖奇侠")break

case(5):

case(6):

case(7):

case(8):

case(9):printf("等级:孤独求败")break

default:printf("等级:不死之身")break

}

}

}

}

/*****************************************************************************************************************************/

int readfile(void)//读文件

{

int i,number=5

if((in=fopen("sunyi.txt","rb"))!=NULL)

{

fread(&number,sizeof(int),1,in)

for(i=0i<numberi++)

{

fread(&cpt[i],sizeof(struct computer),1,in)

}

fclose(in)

}

return(number)

}

/******************************************************************************************************************************/

void writefile() //写文件

{

int i

in=fopen("sunyi.txt","wb")

fwrite(&number,sizeof(int),1,in)

for(i=0i<numberi++)

{

fwrite(&cpt[i],sizeof(struct computer),1,in)

}

fclose(in)

}

/*******************************************************************************************************************************/

void rule() //规则函数

{

printf(" 猜拳游戏\n")

printf("规则:\n")

printf(" 输入“N”或“n”查看积分,第一次游戏时,会免费赠送玩家100枚金币,每局游戏都会")

printf("提示您输入押金,押金必须大于1枚金币!(含1枚),提示游戏开始后,输入一个1~3")

printf("之间的值1表示石头,2表示剪刀,3表示布。同时,系统也将出拳,按照通俗规则,赢者")

printf("将得到押金,否则扣除,当积分小于5分时,您有五次机会得到系统免费赠送的30分,")

printf("当玩家金币数为零时(又用完5次得到30金币的机会), 系统将提示玩家游戏结束。并删")

printf("除用户。\n")

printf("#本系统会自动生成5个系统玩家轮流与您游戏,游戏前,玩家需要登录来调出自己")

printf("的游戏记录,如果是第一次游戏,请输入“register”,再输入新用户名注册,如果以前")

printf("进行过游戏,请输入“entry”再输入“用户名”登录.\n(注:本系统允许存储本记录多个用户的信息。)\n\n")

}

/*********************************************************************************************************************************/

int registe() //开始游戏前的登录和注册.

{

char ch[30]

int i

loop4:

printf("\n第一次玩游戏?请输入“register”注册!\n登录?请输入“entry”登录\n")

loop3:

scanf("%s",ch)

if(strcmp("register",ch)==0)

{

loop2:

printf("请输入新用户名:(长度小于30个字符)")

scanf("%s",ch)

for(i=5i<numberi++)

{

if(strcmp(cpt[i].player,ch)==0)

{

printf("这个用户已被注册过!注册失败!请重新注册!\n")

goto loop2

}

}

strcpy(cpt[number].player,ch)

cpt[number].score=100

cpt[number].time=cpt[number].times=1

number+=1

writefile()

printf("注册成功!请登录并在您的用户下进行游戏!:")

goto loop4

}

else if(strcmp("entry",ch)==0)

{

printf("请输入用户名登录:")

scanf("%s",ch)

for(i=5i<numberi++)

{

if(strcmp(cpt[i].player,ch)==0)

{

printf("登录成功!\n")

printf("您将在您的用户下进行游戏。!")

break

}

}

if(i==number)

{

printf("输入错误或没有注册或该用户由于输光金币已被系统删除!\n请重新输入用户名登录!")

goto loop4

}

}

else

{

printf("您输入的不是“register”也不是“entry”,系统无法执行您的命令,请重新输入:\n")

goto loop3

}

return(i)

}

/*********************************************************************************************************************************/

void game() //游戏和查询的主体函数

{

int o,p

char a[10],wether[1]

if(cpt[rool].time==1)printf("本局游戏系统将免费赠予您100枚金币。\n")

if(cpt[rool].score<5&&cpt[rool].times<=5)

{

if(cpt[rool].times<5)

{

printf("您的积分已少于5分,系统第%d次赠送你30枚金币\n",cpt[rool].times)

}

else

{

printf("您的积分已少于5分,系统最后一次赠送你30枚金币!\n")

}

cpt[rool].score+=30

cpt[rool].times+=1

game()

}

if(cpt[rool].score==0)

{

int q

printf("您不能在没有积分的状态下游戏!你的用户将被删除,如果您还想继续游戏,请重新申请用户\nGAME OVER!\n")

for(q=roolq<number-1q++)

{

strcpy(cpt[q].player,cpt[q+1].player)

cpt[q].time=cpt[q+1].time

cpt[q].times=cpt[q+1].times

cpt[q].score=cpt[q+1].score

}

number-=1

writefile()

return

}

else

{

printf("是否继续游戏,输入‘y’或‘Y’继续游戏\n")

scanf("%s",wether)

if(strcmp("y",wether)!=0 &&strcmp("Y",wether)!=0)

{

printf("GAME STOP")

return

}

else

{

loop1:

printf("请输入你对本局游戏的押金或输入'N'或‘n’查询积分排名\n")

loop5:

scanf("%s",a)

/****************************************************************************************************************************************************/

if(a[0]=='n'||a[0]=='N')//查寻排名

{

int i[5]={-1,-1,-1,-1,-1},j,k,d=0,e=0,line=-1

for(k=1k<=5k++)

{

for(d=0d<5d++)

{

if(d!=i[0]&&d!=i[1]&&d!=i[2]&&d!=i[3]&&d!=i[4])break

}

for(j=0j<numberj++)

{

if(cpt[j].score>=cpt[d].score&&j!=i[0]&&j!=i[1]&&j!=i[2]&&j!=i[3]&&j!=i[4])d=j

}

i[k-1]=d

if(d==rool)

{

line=k

}

printf("\n玩家:%10s,金币数:%4d,",cpt[d].player,cpt[d].score)

b(cpt[d].score)

}

if(line!=-1)

{

printf("\n\n您目前的积分为:%d,\n排名为:%d,\n",cpt[rool].score,line)

b(cpt[rool].score)

printf("\n\n")

}

else

{

printf("\n\n您目前的积分为:%d,\n没有进入前5名\n",cpt[rool].score)

b(cpt[rool].score)

printf("\n\n")

}

game()

}

/*****************************************************************************************************************************************************/

else//玩游戏

{

int g=0,le=strlen(a)

for(g<leg++)

{

if(!(a[g]>='0'&&a[g]<='9'))

{

printf("你输入了游戏系统无法识别的字符,请重新输入:")

break

}

}

if(g<le)

{

goto loop5

}

int money=str_to_num(a)

if(money==0)

{

printf("押金不能为‘0’,请重新输入:")

goto loop5

}

if(money<0)

{

printf("押金不能为负数,请重新输入:")

goto loop5

}

printf("和您进行本轮游戏的是系统玩家player%d。\n",(cpt[rool].time-1)%5+1)

if(cpt[(cpt[rool].time-1)%5].score<5)

{

cpt[(cpt[rool].time-1)%5].score+=50

printf("你的对手的金币小于5个,系统赠送你的对手50枚金币\n")

}

printf("您设定的押金为%d\n",money)

if(money>cpt[rool].score)

{

printf("抱歉,您的金币不足!请重新输入!\n")

goto loop1

}

if(money>cpt[(cpt[rool].time-1)%5].score)

{

printf("抱歉,您的对手金币不足!请重新输入!\n")

goto loop1

}

if(1>0)

{

printf("游戏开始,请出拳!(1表示石头,2表示剪刀,3表示布)")

scanf("%d",&o)

p=h()

switch(o)

{

case 1:

{

printf("玩家出拳:石头\n")

break

}

case 2:

{

printf("玩家出拳:剪子\n")

break

}

case 3:

{

printf("玩家出拳:布\n")

break

}

}

switch(p)

{

case 1:

{

printf("系统出拳:石头\n")

break

}

case 2:

{

printf("系统出拳:剪子\n")

break

}

case 3:

{

printf("系统出拳:布\n")

break

}

}

switch(o-p)

{

case 0 :

{

printf("平局!系统将不改变你的金币数量,你的余额为:%d\n",cpt[rool].score)

break

}

case 1 :

case -2:

{

printf("你输了,系统将扣除你%d个金币,你的余额为:%d\n",money,cpt[rool].score-money)

cpt[rool].score-=money

cpt[(cpt[rool].time-1)%5].score=cpt[(cpt[rool].time-1)%5].score+money

break

}

case -1:

case 2 :

{

printf("你赢了,系统将给予你%d个金币,你的余额为:%d\n",money,cpt[rool].score+money)

cpt[rool].score+=money

cpt[(cpt[rool].time-1)%5].score=cpt[(cpt[rool].time-1)%5].score-money

break

}

}

cpt[rool].time+=1

writefile()

}

game()

}

}

}

}

main() //主函数

{

srand( (unsigned)time(0) )

number=readfile()

rule()

rool=registe()

game()

}

大哥,刚刚看到你的就开始写了。各种功能都有,包括判断你输入的字符是否正确,假如不符合的字符就提示。不玩了就可以直接按0退出。

然后,只要是赢三次,输三次都自动退出,并输出你输赢,还可以自动共玩多少局,输赢局数统计!希望能帮到您。

/*

猜拳游戏思路

1、定义输入函数

2、提示用户输入猜拳数值

3、定义随机一个数作为电脑数值

4、判断[用州春搏户输入数值]与 [电脑随机数值]

5、能够相等就是打平,不能相等就利用&&、||逻辑符判断输赢

6、设定数值1-石册祥头 2-剪刀  3-布

*/

import java.util.*//嵌入Java.util包所有

public class Cq{

public static void main(String[] args){

int win=0//赢的记录

int lose=0//输的记录

int all=1//计数总的局数

int a=1//控制循环条件使用

System.out.println("--------------猜拳游戏---------------")

System.out.println("游戏规则:赢三次便赢,输三次便输。")

while(a>0){//假如a=0的话就不用继续玩

Scanner in=new Scanner(System.in)//定义输入函数in,Scanner包功能,输入数值用的

System.out.println("请输入一个数值:1、石头    2、剪刀     3、布     0、退出游戏")//提示输入数值

System.out.println(" ")//空行

int x=in.nextInt()//让用户输入X的数值

Random on=new Random()//定义电脑的随机数值的函数on

int y=on.nextInt(3)+1//定义y随机函数数值范围(1--3)

if(x>=4){   //判断用户是否输入非1--3范围

System.out.println("亲,请正确输入:1、石头 2、剪刀 3、布。你输入了:"+x)

}else if(x==0){

a=0

System.out.println("欢迎再次玩“猜拳游戏”!")

return

}

else{

/*下面是判断用户输入x的数值 嵌套if*/

if(x==y){

if(x==1){ //判断打平的情况

System.out.println("你:石头------电脑:石头    PK:平手"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}

else if(x==2){

System.out.println("你:剪刀------电脑:剪刀   PK:平手"+"    共玩"+all+"局森州,"+"赢:"+win+",输:"+lose)

all++

}else {

System.out.println("你:布------电脑:布    PK:平手"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}

/*   打平手的判断END*/

}else if(x==1&&y==2||x==2&&y==3||x==3&&y==1){ //开始判断赢的情况

if(x==1&&y==2){

win++//win1

System.out.println("[你]:石头---VS---[电脑]:剪刀    PK:赢了!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}else if(x==2&&y==3){

win++//win2

System.out.println("[你]:剪刀---VS---[电脑]:布   PK:赢了!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}else {

win++//win3

System.out.println("[你]:布---VS---[电脑]:石头     PK:赢了!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}

//判断赢的情况END

}else {//开始判断输的情况

if(x==1&&y==3){

lose++

System.out.println("[你]:石头---VS---[电脑]:布    PK:输了!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}else if(x==2&&y==1){

lose++

System.out.println("[你]:剪刀---VS---[电脑]:石头    PK:输了!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}else {

lose++

System.out.println("[你]:布---VS---[电脑]:剪刀    PK:输了!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

all++

}

}//判断输的情况END

if(win==3){

System.out.println("")

System.out.println("")

System.out.println("游戏结束:恭喜您!你已经赢了[电脑]三局!!!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

a=1

return

}else if (lose==3) {

a=1

System.out.println("")

System.out.println("")

System.out.println("游戏结束:很遗憾,电脑赢了你三盘!继续加油!"+"    共玩"+all+"局,"+"赢:"+win+",输:"+lose)

return

}

else{continue}

}//判断是否输入数值1-3范围,如果不是1-3会提醒重新输入 END

}//while

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8245151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存