急需一个C语言 猜拳游戏的源代码!!!!

急需一个C语言 猜拳游戏的源代码!!!!,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

急需一个C语言 猜拳游戏的源代码!!!!急需一个C语言 猜拳游戏的源代码!!!!急需一个C语言 猜拳游戏的源代码!!!!急需一个C语言 猜拳游戏的源代码!!!!急需一个C语言 猜拳游戏的源代码!!!!急需一个C语言 猜拳游戏的源代码!!!!急需一个C语言 猜拳游戏的源代码!!!!

解析:

enum p_r_s{

paper,rock,scissors,game,help,instructions,quit

}

#include <stdio.h>

main()

{

enum p_r_s player,machine

enum p_r_s selection_by_player(),selection_by_machine()

int win,lose,tie

win=lose=tie=0

instructions_for_the_player()

while((player=selection_by_player())!=quit)

switch(player){

case paper:

case rock:

case scissors:

machine=selection_by_machine()

if(player==machine){

++tie

printf("\n a tie")

}

else if(you_won(player,machine)){

++win

printf("\n you won")

}

else{

++lose

printf("\n i won")

}

break

case game:

game_status(win,lose,tie)

break

case instructions:

instructions_for_the_player()

break

case help:

help_for_the_player()

break

}

game_status(win,lose,tie)

printf("\n\nBYE\n\n")

}

instructions_for_the_player()

{

printf("\n%s\n\n%s\n\n%s\n%s\n%s\n\n%s\n%s\n%s\n\n%s\n%s\n%s",

"PAPER,ROCK,SCISSORS",

"In this game",

"p is for paper,",

"r is for rock,",

"s is for scissors.",

"Both the player and the machine will choose one",

"of p,r,or s. If the o choices are the same,",

"then the game is a tie. Otherwise:",

"\"paper covers the rock\" (a win for paper),",

"\"rock breaks the scissors\" (a win for rock),",

"\"scissors cut the paper\" (a win for scissors).")

printf("\n\n%s\n\n%s\n%s\n%s\n%s\n\n%s\n\n%s",

"There are other allowable inputs:",

"g for game status (the number of wins so far),",

"h for help,",

"i for instructions (reprin these instructions),",

"q for quit (to quit the game).",

"This game is played repeatedly until q is entered.",

"Good luck!")

}

enum p_r_s selection_by_player()

{

char c

enum p_r_s player

printf("\n\ninput p,r,or s:")

while((c=getchar())==''||c=='\n'||c=='t')

switch(c){

case 'p':

player=paper

break

case 'r':

player=rock

break

case 's':

player=scissors

break

case 'g':

player=game

break

case 'i':

player=instructions

break

case 'q':

player=quit

break

default:

player=help

}

return(player)

}

enum p_r_s selection_by_machine()

{

static int i

i=++i%3

return((i==0)? paper:((i==1)? rock:scissors))

}

you_won(player,machine)

enum p_r_s player,machine

{

int victory

if(player==paper)

victory=machine==rock

else if(player==rock)

victory=machine==scissors

else/*player==scissors*/

victory=machine==paper

return(victory)

}

game_status(win,lose,tie)

{

printf("\nGAME STATUS")

printf("\n\n%7d%s\n%7d%s\n%7d%s\n%7d%s",

win,"games won by you",

lose,"games won by me",

tie,"game tied",

win+lose+tie,"games played:")

}

help_for_the_player()

{

printf("\n%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s",

"the following characters can be used for input:",

" p for paper",

" r for rock",

" s for scissors",

" g to find out the game status",

" h to print this list",

" i to reprint the instructions for this game",

" q to quit this game")

}

五子棋的代码:

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

usingnamespacestd

constintN=15         //15*15的棋盘

constcharChessBoardflag=''     //棋盘标志

constcharflag1='o'       //玩家1或电脑的棋子标志

constcharflag2='X'       //玩家2的棋子标志

typedefstructCoordinate     //坐标类

{

intx             //代表行

inty             //代表列

}Coordinate

classGoBang          //五子棋类

{

public:

GoBang()        //初始化

{

InitChessBoard()

}

voidPlay()        //下棋

{

CoordinatePos1   //玩家1或电脑

CoordinatePos2   //玩家2

intn=0

while(1)

{

intmode=ChoiceMode()

while(1)

{

if(mode==1)    //电脑vs玩家

{

ComputerChess(Pos1,flag1)   //电脑下棋

if(GetVictory(Pos1,0,flag1)==1)   //0表示电脑,真表示获胜

break

PlayChess(Pos2,2,flag2)   //玩家2下棋

if(GetVictory(Pos2,2,flag2))   //2表示玩家2

break

}

else      //玩家1vs玩家2

{

PlayChess(Pos1,1,flag1)   //玩家1下棋

if(GetVictory(Pos1,1,flag1))   //1表示玩家1

break

PlayChess(Pos2,2,flag2)   //玩家2下棋

if(GetVictory(Pos2,2,flag2)) //2表示玩家2

break

}

}

cout<<"***再来一局***"<<endl

cout<<"yorn:"

charc='y'

cin>>c

if(c=='n')

break

}

}

protected:

intChoiceMode()      //选择模式

{

inti=0

system("cls")    //系统调用,清屏

InitChessBoard()    //重新初始化棋盘

cout<<"***0、退出 1、电脑vs玩家 2、玩家vs玩家***"<<endl

while(1)

{

cout<<"请选择:"

cin>>i

if(i==0)     //选择0退出

exit(1)

if(i==1||i==2)

returni

cout<<"输入不合法"<<endl

}

}

voidInitChessBoard()   //初始化棋盘

{

for(inti=0i<N+1++i)

{

for(intj=0j<N+1++j)

{

_ChessBoard[i][j]=ChessBoardflag

}

}

}

voidPrintChessBoard()  //打印棋盘,这个函数可以自己调整

{

system("cls")        //系统调用,清空屏幕

for(inti=0i<N+1++i)

{

for(intj=0j<N+1++j)

{

if(i==0)                //打印列数字

{

if(j!=0)

printf("%d ",j)

else

printf("  ")

}

elseif(j==0)        //打印行数字

printf("%2d",i)

else

{

if(i<N+1)

{

printf("%c|",_ChessBoard[i][j])

}

}

}

cout<<endl

cout<<"  "

for(intm=0m<Nm++)

{

printf("--|")

}

cout<<endl

}

}

voidPlayChess(Coordinate&pos,intplayer,intflag)    //玩家下棋

{

PrintChessBoard()     //打印棋盘

while(1)

{

printf("玩家%d输入坐标:",player)

cin>>pos.x>>pos.y

if(JudgeValue(pos)==1)     //坐标合法

break

cout<<"坐标不合法,重新输入"<<endl

}

_ChessBoard[pos.x][pos.y]=flag

}

voidComputerChess(Coordinate&pos,charflag)    //电脑下棋

{

PrintChessBoard()     //打印棋盘

intx=0

inty=0

while(1)

{

x=(rand()%N)+1   //产生1~N的随机数

srand((unsignedint)time(NULL))

y=(rand()%N)+1   //产生1~N的随机数

srand((unsignedint)time(NULL))

if(_ChessBoard[x][y]==ChessBoardflag)   //如果这个位置是空的,也就是没有棋子

break

}

pos.x=x

pos.y=y

_ChessBoard[pos.x][pos.y]=flag

}

intJudgeValue(constCoordinate&pos)    //判断输入坐标是不是合法

{

if(pos.x>0&&pos.x<=N&&pos.y>0&&pos.y<=N)

{

if(_ChessBoard[pos.x][pos.y]==ChessBoardflag)

{

return1  //合法

}

}

return0    //非法

}

intJudgeVictory(Coordinatepos,charflag)      //判断有没有人胜负(底层判断)

{

intbegin=0

intend=0

intbegin1=0

intend1=0

//判断行是否满足条件

(pos.y-4)>0?begin=(pos.y-4):begin=1

(pos.y+4)>N?end=N:end=(pos.y+4)

for(inti=pos.x,j=beginj+4<=endj++)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i][j+1]==flag&&

_ChessBoard[i][j+2]==flag&&_ChessBoard[i][j+3]==flag&&

_ChessBoard[i][j+4]==flag)

return1

}

//判断列是否满足条件

(pos.x-4)>0?begin=(pos.x-4):begin=1

(pos.x+4)>N?end=N:end=(pos.x+4)

for(intj=pos.y,i=begini+4<=endi++)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i+1][j]==flag&&

_ChessBoard[i+2][j]==flag&&_ChessBoard[i+3][j]==flag&&

_ChessBoard[i+4][j]==flag)

return1

}

intlen=0

//判断主对角线是否满足条件

pos.x>pos.y?len=pos.y-1:len=pos.x-1

if(len>4)

len=4

begin=pos.x-len    //横坐标的起始位置

begin1=pos.y-len   //纵坐标的起始位置

pos.x>pos.y?len=(N-pos.x):len=(N-pos.y)

if(len>4)

len=4

end=pos.x+len    //横坐标的结束位置

end1=pos.y+len   //纵坐标的结束位置

for(inti=begin,j=begin1(i+4<=end)&&(j+4<=end1)++i,++j)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i+1][j+1]==flag&&

_ChessBoard[i+2][j+2]==flag&&_ChessBoard[i+3][j+3]==flag&&

_ChessBoard[i+4][j+4]==flag)

return1

}

//判断副对角线是否满足条件

(pos.x-1)>(N-pos.y)?len=(N-pos.y):len=pos.x-1

if(len>4)

len=4

begin=pos.x-len    //横坐标的起始位置

begin1=pos.y+len   //纵坐标的起始位置

(N-pos.x)>(pos.y-1)?len=(pos.y-1):len=(N-pos.x)

if(len>4)

len=4

end=pos.x+len    //横坐标的结束位置

end1=pos.y-len   //纵坐标的结束位置

for(inti=begin,j=begin1(i+4<=end)&&(j-4>=end1)++i,--j)

{

if(_ChessBoard[i][j]==flag&&_ChessBoard[i+1][j-1]==flag&&

_ChessBoard[i+2][j-2]==flag&&_ChessBoard[i+3][j-3]==flag&&

_ChessBoard[i+4][j-4]==flag)

return1

}

for(inti=1i<N+1++i)      //棋盘有没有下满

{

for(intj=1j<N+1++j)

{

if(_ChessBoard[i][j]==ChessBoardflag)

return0           //0表示棋盘没满

}

}

return-1   //和棋

}

boolGetVictory(Coordinate&pos,intplayer,intflag)  //对JudgeVictory的一层封装,得到具体那个玩家获胜

{

intn=JudgeVictory(pos,flag)  //判断有没有人获胜

if(n!=0)          //有人获胜,0表示没有人获胜

{

PrintChessBoard()

if(n==1)        //有玩家赢棋

{

if(player==0)   //0表示电脑获胜,1表示玩家1,2表示玩家2

printf("***电脑获胜***\n")

else

printf("***恭喜玩家%d获胜***\n",player)

}

else

printf("***双方和棋***\n")

returntrue   //已经有人获胜

}

returnfalse  //没有人获胜

}

private:

char_ChessBoard[N+1][N+1]

}

扩展资料:

设计思路

1、进行问题分析与设计,计划实现的功能为,开局选择人机或双人对战,确定之后比赛开始。

2、比赛结束后初始化棋盘,询问是否继续比赛或退出,后续可加入复盘、悔棋等功能。

3、整个过程中,涉及到了棋子和棋盘两种对象,同时要加上人机对弈时的AI对象,即涉及到三个对象。

"扫雷"小游戏C代码

#include<stdio.h>

#include<math.h>

#include<time.h>

#include<stdlib.h>

main( )

{char a[102][102],b[102][102],c[102][102],w

int i,j /*循环变量*/

int x,y,z[999] /*雷的位置*/

int t,s /*标记*/

int m,n,lei /*计数*/

int u,v /*输入*/

int hang,lie,ge,mo /*自定义变量*/

srand((int)time(NULL)) /*启动随机数发生器*/

leb1:  /*选择模式*/

printf("\n   请选择模式:\n   1.标准  2.自定义\n")

scanf("%d",&mo)

if(mo==2)  /*若选择自定义模式,要输入三个参数*/

{do

{t=0printf("请输入\n行数 列数 雷的个数\n")

scanf("%d%d%d",&hang,&lie,&ge)

if(hang<2){printf("行数太少\n")t=1}

if(hang>100){printf("行数太多\n")t=1}

if(lie<2){printf("列数太少\n")t=1}

if(lie>100){printf("列数太多\n")t=1}

if(ge<1){printf("至少要有一个雷\n")t=1}

if(ge>=(hang*lie)){printf("雷太多了\n")t=1}

}while(t==1)

}

else{hang=10,lie=10,ge=10}  /*否则就是选择了标准模式(默认参数)*/

for(i=1i<=gei=i+1)  /*确定雷的位置*/

{do

{t=0z[i]=rand( )%(hang*lie)

for(j=1j<ij=j+1){if(z[i]==z[j]) t=1}

}while(t==1)

}

for(i=0i<=hang+1i=i+1)  /*初始化a,b,c*/

{for(j=0j<=lie+1j=j+1) {a[i][j]='1'b[i][j]='1'c[i][j]='0'} }

for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1) {a[i][j]='+'} }

for(i=1i<=gei=i+1)  /*把雷放入c*/

{x=z[i]/lie+1y=z[i]%lie+1c[x][y]='#'}

for(i=1i<=hangi=i+1)  /*计算b中数字*/

{for(j=1j<=liej=j+1)

{m=48

if(c[i-1][j-1]=='#')m=m+1if(c[i][j-1]=='#')m=m+1

if(c[i-1][j]=='#')m=m+1 if(c[i+1][j+1]=='#')m=m+1

if(c[i][j+1]=='#')m=m+1 if(c[i+1][j]=='#')m=m+1

if(c[i+1][j-1]=='#')m=m+1if(c[i-1][j+1]=='#')m=m+1

b[i][j]=m

}

}

for(i=1i<=gei=i+1)  /*把雷放入b中*/

{x=z[i]/lie+1y=z[i]%lie+1b[x][y]='#'}

lei=ge /*以下是游戏设计*/

do

{leb2:  /*输出*/

system("cls")printf("\n\n\n\n")

printf("    ")

for(i=1i<=liei=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c  ",w)

}

printf("\n   |")

for(i=1i<=liei=i+1){printf("---|")}

printf("\n")

for(i=1i<=hangi=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c |",w)

for(j=1j<=liej=j+1)

{if(a[i][j]=='0')printf("   |")

else printf(" %c |",a[i][j])

}

if(i==2)printf(" 剩余雷个数")

if(i==3)printf(" %d",lei)

printf("\n   |")

for(j=1j<=liej=j+1){printf("---|")}

printf("\n")

}

scanf("%d%c%d",&u,&w,&v) /*输入*/

u=u+1,v=v+1

if(w!='#'&&a[u][v]=='@')

goto leb2

if(w=='#')

{if(a[u][v]=='+'){a[u][v]='@'lei=lei-1}

else if(a[u][v]=='@'){a[u][v]='?'lei=lei+1}

else if(a[u][v]=='?'){a[u][v]='+'}

goto leb2

}

a[u][v]=b[u][v]

leb3:  /*打开0区*/

t=0

if(a[u][v]=='0')

{for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=1i<=hangi=i+1)

{for(j=liej>=1j=j-1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1   if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=hangi>=1i=i-1)

{for(j=1j<=liej=j+1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=hangi>=1i=i-1)

{for(j=liej>=1j=j-1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1  if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=1i<=hangi=i+1)  /*检测0区*/

{for(j=1j<=liej=j+1)

{if(a[i][j]=='0')

{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1

if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1

if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1

if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1

if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1

if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1

if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1

if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1

}

}

}

if(t==1)goto leb3

}

n=0 /*检查结束*/

for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1)

{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1}

}

}

while(a[u][v]!='#'&&n!=(hang*lie-ge))

for(i=1i<=gei=i+1)  /*游戏结束*/

{x=z[i]/lie+1y=z[i]%lie+1a[x][y]='#'}

printf("    ")

for(i=1i<=liei=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c  ",w)

}

printf("\n   |")

for(i=1i<=liei=i+1){printf("---|")}

printf("\n")

for(i=1i<=hangi=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c |",w)

for(j=1j<=liej=j+1)

{if(a[i][j]=='0')printf(" |")

else  printf(" %c |",a[i][j])

}

if(i==2)printf(" 剩余雷个数")

if(i==3)printf(" %d",lei)printf("\n   |")

for(j=1j<=liej=j+1) {printf("---|")}

printf("\n")

}

if(n==(hang*lie-ge)) printf("你成功了!\n")

else printf("    游戏结束!\n")

printf("    重玩请输入1\n")

t=0

scanf("%d",&t)

if(t==1)goto leb1

}

/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存