小游戏的C++代码

小游戏的C++代码,第1张

/*一个火柴人游戏,亲自验证,可运行*/

/*在编译时添加如下命令:-std=c++11,否则会编译错误*/

#include <cstdio>

#include <cstdlib>

#include <Windows.h>

#include <thread>

#include <conio.h>

using namespace std

const unsigned char CTRL_KEY = 0XE0

const unsigned char LEFT = 0X4B

const unsigned char RIGHT = 0X4D

const unsigned char DOWN = 0X50

const unsigned char UP = 0X48

int men2[2] = {0,0}

int women2[2]={10,10}

int Game()

void gotoxy( int x, int y ) //光标移动到(x,y)位置

{

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE)

COORD pos

pos.X = x

pos.Y = y

SetConsoleCursorPosition(handle,pos)

}

int clean( int mm, int nn )

{

gotoxy ( mm, nn )

printf ( " " )

gotoxy ( mm,nn+1)

printf ( " " )

gotoxy ( mm,nn+2)

printf (" ")

}

int men( int x, int y )

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN)

gotoxy( x, y )

printf(" O")

gotoxy( x, y+1 )

printf("<H>")

gotoxy( x, y+2 )

printf("I I")

}

int women( int i, int j )

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED)

gotoxy( i+1,j )

printf(" O")

gotoxy( i+1,j+1 )

printf("<H>")

gotoxy( i,j+2 )

printf("/I I\\")

}

int m=10, n=10

int x=0int y=0

int TorF()

{

if ( x == m &&y == n ) return 1

else return 0

}

int womenmove()

{

int turn

int YNbreak=0

while( YNbreak == 0 )

{

YNbreaak = TorF()

turn=rand()%3

clean( m, n )

if( m <x ) m++

else m--

if( m == x )

{

if( n <y ) n++

else n--

}

if ( m <0 ) m = 0

if ( m >= 75 ) m = 75

if ( n <0 ) n = 0

if ( n >= 22 ) n = 22

women( m,n )

women2[0]=m

women2[1]=n

Sleep(100)

}

system ( "cls" )

gotoxy ( 28, 10 )

printf ( "You died!!!\n" )

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE)

system ( "pause" )

exit(0)

return 0

}

int menmove()

{

system( "cls" )

while (1)

{

switch( getch())

{

case UP:y--break

case DOWN:y++break

case LEFT:x--break

case RIGHT:x++break

}

system( "cls" )

if ( x <0 ) x = 0

if ( x >77 ) x = 77

if ( y <0 ) y = 0

if ( y >22 ) y = 22

men( x, y )

men2[0] = x

men2[1] = y

}

}

int Game()

{

women( 10, 10 )

men( 0, 0 )

int t = 0

thread qq( womenmove )

menmove()

qq.join()

return 0

}

int main()

{

system( "mode con cols=80 lines=25" )

printf ( "游戏开始后,随机按下一个键,唤醒你的蓝色小人.如果你被红色的老女人碰到了,那么你就死了\n" )

printf ( "方向键 *** 控小人\n" )

system ( "pause" )

system ( "cls" )

Game()

return 0

}

/*留下您的赞再拿走,谢谢!*/

“猜数字小游戏”,每个数字后按空格,最后按回车确认

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

int a[4],b[4]

int count=0  //计算猜测次数

void csh( )  //初始化

void start( )  //开始游戏

int main( )

{ csh( )

start( )

}

void csh( )  //初始化

{ printf("\n\n         猜  数  字  小  游  戏\n\n")

printf(“    猜四个数字,如数字与顺序都正确记为A,数字正确位置不对记为B.\n”)

}

void start( )  //开始游戏

{int m,n  //m是完全猜对的个数,n是顺序不对的个数

while(1)

{srand((unsigned)time(NULL))  //初始化随机数发生器srand( )

while(1) { for(int i=0i<4i++) a[i]=rand( )%10 //rand( )函数每次随机产生一个0-9的数

if( (a[3]!=a[2]&&a[3]!=a[1]&&a[3]!=a[0])&&

(a[2]!=a[1]&&a[2]!=a[0])&&a[1]!=a[0] ) break}  //4个随机数各自不相等

printf("    请依次输入4个一位整数:\n\n   ")

while(1)

{for(int i=0i<4i++) scanf(“%d”,&b[i])

printf("    你输入的是:%d  %d  %d  %d ",b[0],b[1],b[2],b[3])

m=0n=0

for(int i=0i<4i++)

{for(int j=0j<4j++)

{ if(b[i]==a[j]&&i==j)m=m+1if(b[i]==a[j]&&i!=j)n=n+1}

}

count=count+1

printf("      %dA  %dB   你试了%d次\n   ",m,n,count)

if(m==4)break

if(count==8){ count=0break}

}

printf("\n")

if(m==4)printf("     你猜对了(^-^)! 就是:%d %d %d %d\n",a[0],a[1],a[2],a[3])

else printf("     你输了(T-T)!哈哈!应该是:%d %d %d %d\n",a[0],a[1],a[2],a[3])

int z

printf("     (要继续吗?1或0)\n   ")

scanf(“%d”,&z)

if(z==0) break

}

}

五子棋的代码:

#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对象,即涉及到三个对象。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存