2、作为中国古传至今仍时尚流行的饮酒游戏,它增添酒兴,烘托喜庆,是一种中国民间的酒令。其技巧性颇强,给玩者留有神机斗智的余地,且因玩时须喊叫,易让人兴奋,极富竞争性。
3、基本规则:中国传统的划拳法是两人同时出一只手,并且同时猜两人所出数字之和,两人都猜错或猜对则继续,直到一方猜对。猜错者罚酒。 划拳是用嘴和手配合完成的,两人面对面进行。
4、具体如下:两人同时伸出一只手,用攥起的拳头和伸出一到五个手指,表示从零到五这几个数字,与此同时,嘴里喊出从0到10的数字,如果两人伸出的手指表示的数字相加与其中一个人嘴里喊出的数字相同,那么这个人就算赢了这一拳。
5、划拳时,伸指喊数的范围为一至十,并附之以吉利语句。划拳时口所喊字数,因地域不同而不同。
package testimport java.util.Random
import java.util.Scanner
/**
* 猜拳游戏思路
* 1、定义输入函数
* 2、提示用户输入猜拳数值
* 3、定义随机一个数作为电脑数值
* 4、判断[用户输入数值]与 [电脑随机数值]
* 5、能够相等就是打平,不能相等就利用&&、||逻辑符判断输赢
* 6、设定数值1-石头 2-剪刀 3-布
*/
public class CaiQuanYouXi {
public static void main(String[] args) {
Scanner in=new Scanner(System.in)//定义输入函数in,Scanner包功能,输入数值用的
System.out.println("--------------猜拳游戏---------------")
System.out.println("请输入一个数值:1、石头 2、剪刀 3、布")//提示输入数值
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||x==0){ //判断用户是否输入非1--3范围
System.out.println("亲,请正确输入:1、石头 2、剪刀 3、布。你输入了:"+x)
}else{
/*下面是判断用户输入x的数值 嵌套if*/
if(x==y){
if(x==1){ //判断打平的情况
System.out.println("你:石头------电脑:石头 PK:很幸运打平手")
}else if(x==2){
System.out.println("你:剪刀------电脑:剪刀 PK:很幸运打平手")
}else {
System.out.println("你:布------电脑:布 PK:很幸运打平手")
}
}else if(x==1&&y==2||x==2&&y==3||x==3&&y==1){ //开始判断赢的情况
if(x==1&&y==2){
System.out.println("你:石头------电脑:剪刀 PK:恭喜您,赢了!")
}else if(x==2&&y==3){
System.out.println("你:剪刀------电脑:布 PK:恭喜您,赢了!")
}else {
System.out.println("你:布------电脑:石头 PK:恭喜您,赢了!")
}
}else {//开始判断输的情况
if(x==1&&y==3){
System.out.println("你:石头------电脑:布 PK:很遗憾,输了!")
}else if(x==2&&y==1){
System.out.println("你:剪刀------电脑:石头 PK:很遗憾,输了!")
}else {
System.out.println("你:布------电脑:剪刀 PK:很遗憾,输了!")
}
}
}
}
}
运行后的效果展示:
--------------猜拳游戏---------------
请输入一个数值:1、石头 2、剪刀 3、布
1
你:石头------电脑:布 PK:很遗憾,输了!
--------------猜拳游戏---------------
请输入一个数值:1、石头 2、剪刀 3、布
4
亲,请正确输入:1、石头 2、剪刀 3、布。你输入了:4
/*至搂主:本游戏系统可支持多个用户游戏,一次只能登录一个用户,运行此程序会生成一个文件来存储用户信息,本程序允许承载的用户个数为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条)