分享好友 天南地北首页 网站导航

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

网友发布 2023-07-27 00:59 · 头闻号游戏应用

#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>=0;i--)

{

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=0;i<number;i++)

{

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=0;i<number;i++)

{

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(注:本系统允许存储本记录多个用户的信息。)nn");

}

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=5;i<number;i++)

{

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=5;i<number;i++)

{

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=rool;q<number-1;q++)

{

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=1;k<=5;k++)

{

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

{

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

}

for(j=0;j<number;j++)

{

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("nn您目前的积分为:%d,n排名为:%d,n",cpt[rool].score,line);

b(cpt[rool].score);

printf("nn");

}

else

{

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

b(cpt[rool].score);

printf("nn");

}

game();

}

else //玩游戏

{

int g=0,le=strlen(a);

for(;g<le;g++)

{

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("您设定的押金为%dn",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("平局!系统将不改变你的金币数量,你的余额为:%dn",cpt[rool].score);

break;

}

case 1 :

case -2:

{

printf("你输了,系统将扣除你%d个金币,你的余额为:%dn",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个金币,你的余额为:%dn",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();

}

用c语言怎么写猜拳游戏啊!我刚刚学一个月

按照你的要求写了一个,比较的粗糙。没有实现你的10秒倒数,这个留给你自己去思考吧。我大致的说一说,写了一个服务器端 和 客户端。用到的技术有:多线程,c#网络编程。客户端连接到服务器端 通过服务器端处理和转发 猜拳的结果。在服务端中设定了连接的最大客户端数量为2 。也就是只能连2个客户端,可以视实际情况更改。写了一个下午,也没有好好的写注释。如果你是学习的话就加我讨论吧。以上是整体运行的效果,中间是服务器端,两边分别为客户端1 和客户端2////////////////////////////////////////////////////////////////////////////////服务器端界面:服务器端代码:using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;namespace Server

{

public partial class Form1 : Form

{

private TcpListener listener;

private List<TcpClient> clientList;

private Thread t;

private Thread t1;

private string outTos;

public Form1()

{

InitializeComponent();

setControls();

} private void setControls()

{

clientList = new List<TcpClient>(); button1.Text = "Start";

button1.Click += new EventHandler(button1_Click);

button2.Text = "Stop";

button2.Click += new EventHandler(button2_Click);

} private void StartServer()

{

IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });

listener = new TcpListener(ip, 8500);

listener.Start();

richTextBox1.Text += string.Format("服务器:{0} 端口号:{1} 已经启动...n",ip.ToString(),8500);

}

private void GetClient()

{

do

{

if (clientList.Count >= 2)

{

//clientList.Clear();

break;

}

else

{

clientList.Add(listener.AcceptTcpClient());

outTos += string.Format("Player:{0} is connectingn", clientList[clientList.Count - 1].Client.LocalEndPoint);

if (clientList.Count == 2)

{

try

{

t1 = new Thread(GetMsg);

t1.Start();

}

catch

{

t1.Abort();

}

}

}

}

while (true);

}

private void GetMsg()

{

do

{

int byteRead = 0;

int bufferSize = 2000;

byte[] buffer = new byte[bufferSize]; NetworkStream stream1 = clientList[0].GetStream();

byteRead = stream1.Read(buffer, 0, bufferSize);

string msg = Encoding.Unicode.GetString(buffer, 0, byteRead); NetworkStream stream2 = clientList[1].GetStream();

byteRead = stream2.Read(buffer, 0, bufferSize);

string msg1 = Encoding.Unicode.GetString(buffer, 0, byteRead); if (msg != string.Empty && msg1 != string.Empty)

{

SendMsg(GetAnsower(msg, msg1));

}

}

while (true); } private void SendMsg(int win)

{

string p1 = string.Empty;

string p2 = string.Empty;

if (win == 0)

{

p1 = "平手";

p2 = "平手";

}

if (win == 1)

{

p1 = "赢了!";

p2 = "输了!";

}

if (win == 2)

{

p1 = "输了!";

p2 = "赢了!";

} NetworkStream stream1 = clientList[0].GetStream();

byte[] buffer1 = Encoding.Unicode.GetBytes(p1);

stream1.Write(buffer1, 0, buffer1.Length); NetworkStream stream2 = clientList[1].GetStream();

byte[] buffer2 = Encoding.Unicode.GetBytes(p2);

stream2.Write(buffer2, 0, buffer2.Length);

outTos += string.Format("消息已发送 玩家1:{0} 玩家2:{1}n",p1,p2);

} private int GetAnsower(string m1,string m2)

{

int win = 0;

if (m1 == "剪刀")

{

if (m2 == "布") win = 1;

if (m2 == "石头") win = 2;

if (m2 == "剪刀") win = 0;

}

if (m1 == "石头")

{

if (m2 == "剪刀") win = 1;

if (m2 == "布") win = 2;

if (m2 == "石头") win = 0;

}

if (m1 == "布")

{

if (m2 == "石头") win = 1;

if (m2 == "剪刀") win = 2;

if (m2 == "布") win = 0;

}

return win;

} void button1_Click(object sender, EventArgs e)

{

try

{

StartServer();

t = new Thread(GetClient);

t.Start();

timer1.Start();

}

catch (Exception ex)

{

t.Abort();

t1.Abort();

timer1.Stop();

timer1.Stop();

}

}

void button2_Click(object sender, EventArgs e)

{

t.Abort();

t1.Abort();

listener.Stop();

timer1.Stop();

MessageBox.Show("服务器已关闭!");

} private void timer1_Tick(object sender, EventArgs e)

{

richTextBox1.Text += outTos;

outTos = string.Empty;

}

}

}

#include<cstdio>

#include<cstdlib>

#include<ctime>

int?main()

{

int?a=0,b=0,i,c,h,wr;

printf("飞行棋,先输入格子数,之后每次输入1-3的数(上限100)n");

printf("输入格子数:");?

scanf("%d",&h);

a=a+h;b=b+h;

while(1)

{

printf("1=石头2=剪刀3=布n");

printf("?*?*****n***?*?****n*?**?***n");

printf("输入1~3n");

printf("----------------------------------n");

scanf("%d",&i);

srand(time(0));

c=rand()%3;

if(i==1&&c==2||i==2&&c==3||i==3&&c==1)

{a=a-1;

printf("你赢了,前进一步n你还剩%d?电脑剩%dn",a,b);

printf("*--------------------------------*n");}

else?if(c==1&&i==2||c==2&&i==3||c==3&&i==1)

{b=b-1;

printf("你输了,电脑前进n你还剩%d?电脑剩%dn",a,b);

printf("/--------------------------------/n");}

else?{printf("平局n你还剩%d?电脑剩%dn",a,b);

printf("?--------------------------------?n");}

if(a==0||b==0)break;}

if(a==0)printf("you?winn");

else?printf("you?losen");

system("pause");

}

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

收藏

点赞