用C语言写了一个小游戏(飞行棋 - 投骰子,投出几走几步),怎么实现游戏的存档与读档?

Python012

用C语言写了一个小游戏(飞行棋 - 投骰子,投出几走几步),怎么实现游戏的存档与读档?,第1张

呵呵,这个不算难!

简单点就用ifstream和ofstream

具体用法

//预处理:

#include <fstream>

//声明函数

ifstream fin ("game.txt")/*这里的fin可以替换用任意函数名替换.必须先在该游戏目录下创建存档,才可读取。(“”)中只用输入文件名,这里是搜索该游戏所在的文件夹中的文件,即你的游戏.exe存在了program files里,运行ifstream fin("game.txt")之后dos会在programfiles里寻找game.txt文件。

//使用

fin>>a//具体方法不多说,跟cin一样

//停止使用

fin.close()//注意!为减少不必要的内存消耗,请一定要加fin.close()

上面提到的是读取

下面还有存档

#include <fstream>

//声明函数

ofstream fout ("game.txt")/*这里的fout可以替换用任意函数名替换.不用先在该游戏目录下创建存档,直接调用,即可存档。(“”)中只用输入文件名,这里是搜索该游戏所在的文件夹中的文件,即你的游戏.exe存在了program files里,运行ifstream fin("game.txt")之后dos会在programfiles里寻找game.txt文件。

//使用

fin<<a//具体方法不多说,跟cout一样

//停止使用

fin.close()//注意!为减少不必要的内存消耗,请一定要加fout.close()

Are you ready? just do it!

提起飞行棋playTNT,大家都知道,有人问C#实现飞行棋,另外,还有人想问飞行棋play是什么,你知道这是怎么回事?其实playchess是什么意思,下面就一起来看看C#实现飞行棋,希望能够帮助到大家!

飞行棋playTNT

1、C#实现飞行棋

‘五子棋程序人机对战版本

‘需要2个Label控件2个CommandButton控件

PrivateDeclareFunctionSetWindowRgnLib””(ByValhWndAsLong,ByValhRgnAsLong,ByValbRedrawAsBoolean)AsLong飞行棋play贺峻霖。

PrivateDeclareFunctionCreateRoundRectRgnLib””(,,,,,)AsLong

‘DimPlayStep()AsString’记录棋谱的数组飞行棋play时代少年团七人。

‘DimAsString

PrivateConstBoxLAsSingle=50,BoxTAsSingle=50,BoxWAsSingle=25,BoxNAsInteger=18

DimTable()AsLong’棋盘(0-BoxN,0-BoxN)0-空1-黑子2-白子

DimPsCore()AsLong’定义当前玩家桌面空格的分数all霖车mono飞行棋。

DimCsCore()AsLong’定义当前电脑桌面空格的分数TNT全员×你猛车河马的秘密。

DimpWin()AsBoolean’定义玩家的获胜组合

DimcWin()AsBoolean’定义电脑的获胜组合

DimpFlag()AsBoolean’定义玩家的获胜组合标志

DimcFlag()AsBoolean’定义电脑的获胜组合标志飞行棋play时代少年团writeas。

DimThePlayFlagAsBoolean’定义游戏有效标志男男情侣飞行棋棋盘的图片。

PrivateSubCommand1_Click()

IfNotThePlayFlagThenCallInitPlayEnvironment:ExitSub

IfMsgBox(“本局还没有下完,是否重新开始?(Y/N)”,vbYesNo)=vbNoThenExitSub严浩翔自己做扩张。

CallInitPlayEnvironmentM任务表飞行棋。

EndSub

PrivateSubCommand2_Click()EndSub飞行棋all祺。

PrivateSubForm_Load()

DimiAsLong,lwAsLong,lhAsLong

‘=”黑方行00列00″

Me.Width=:Me.Height=祺鑫浴室镜子。

‘Me.Caption=”五子棋-人机对战”:Me.Show严浩翔给贺峻霖塞玩具。

lw=Me.Width\Screen.TwipsPerPixelX:lh=Me.Height\Screen.TwipsPerPixelY严浩翔刘耀文严**扩张。

SetWindowRgnMe.hWnd,CreateRoundRectRgn(0,0,lw,lh,60,60),True

WithLabel1

.Alignment=vbCenter:.FontSize=12:.FontBold=True

.ForeColor=vbRed:.BackStyle=0:.AutoSize=True:.Move,

EndWith

Label2.AutoSize=True:Label2.WordWrap=True

Label2.BackStyle=0:Label2.Move,,河马的秘密河飞行棋。

Command1.Move,,,:Command1.Caption=”再来一局”

Command2.Move,,,:Command2.Caption=””TNT国王游戏车。

CallDrawChessBoard:Me.FillStyle=0:CallInitPlayEnvironment

EndSub

PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)EndSub

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

DimiRowAsLong,iColAsLong,iAsLong,kAsLong,tAsString

IfNotThePlayFlagThenExitSub

IfButton=vbLeftButtonThen’左键下棋

iRow=-1:iCol=-1祺鑫文轩翔霖三受玩游戏。

Fori=0ToBoxN’鼠标必须落在交叉点半径10以内若是则给出行列号

If(Y+10)>(BoxT+i*BoxW)And(Y-10)<=(BoxT+i*BoxW)TheniRow=i

If(X+10)>(BoxL+i*BoxW)And(X-10)<=(BoxL+i*BoxW)TheniCol=i

Next

If(iRow=-1)Or(iCol=-1)ThenBeep:ExitSub

IfTable(iCol,iRow)>0ThenExitSub贺峻霖给刘耀**扩张。

Table(iCol,iRow)=2:Label1.Caption=”下一步黑方”

Me.FillColor=vbWhite:Me.Circle(iCol*BoxW+BoxT,iRow*BoxW+BoxL),8

Fori=0ToUBound(cWin,3)

IfcWin(iCol,iRow,i)=TrueThencFlag(i)=False

Next

CallCheckWin:CallDianNao’检查当前玩家是否获胜调用电脑算法

EndIf

EndSub

PublicSubInitPlayEnvironment()刘耀文贺峻霖囊袋。

‘*****************************************************************************

‘模块名称:InitPlayEnvironment[初始化过程]’描述:1.设置背景音乐。2.设置游戏状态有效。

‘3.初始化游戏状态标签。4.直接指定电脑的**步走法。

‘5.初始化基本得分桌面。6.电脑和玩家获胜标志初始化。

‘7.初始化所有获胜组合。8.重新设定玩家的获胜标志。

‘*****************************************************************************all祺多人运动。

DimiAsLong,jAsLong,mAsLong,nAsLong

ThePlayFlag=True:Label1.Caption=”下一步白方”:Label2.Caption=””情侣飞行棋游戏。

Me.FillColor=vbBlack:Me.FillStyle=0:Me.AutoRedraw=True

Me.Cls:Me.Circle(9*BoxW+BoxL,9*BoxW+BoxT),8

ReDimTable(0ToBoxN,0ToBoxN)AsLong

ReDimpFlag(NumsWin(BoxN+1)-1)AsBoole****l祺六个一起上马嘉祺。

ReDimcFlag(UBound(pFlag))AsBoolean

ReDimPsCore(BoxN,BoxN)AsLong,CsCore(BoxN,BoxN)AsLong

ReDimpWin(BoxN,BoxN,UBound(pFlag))AsBoolean刘耀文往马嘉祺里塞td。

ReDimcWin(BoxN,BoxN,UBound(pFlag))AsBoolean

Fori=0ToUBound(pFlag):pFlag(i)=True:cFlag(i)=True:Next时代少年团乱炖飞行棋。

Table(9,9)=1’假定电脑先手并下了(9,9)位将其值设为1飞行棋all鑫。

‘********初始化获胜组合****************************************河马的秘密河翔霖飞行棋。

Fori=0ToBoxN:Forj=0ToBoxN-4

Form=0To4

pWin(j+m,i,n)=True:cWin(j+m,i,n)=True

Next

n=n+1

Next:Next

Fori=0ToBoxN:Forj=0ToBoxN-4

Form=0To4

pWin(i,j+m,n)=True:cWin(i,j+m,n)=True

Next

n=n+1

Next:Next

Fori=0ToBoxN-4:Forj=0ToBoxN-4

Form=0To4

pWin(j+m,i+m,n)=True:cWin(j+m,i+m,n)=True

Next

n=n+1

Next:Next

Fori=0ToBoxN-4:Forj=-1

Form=0To4

pWin(j-m,i+m,n)=True:cWin(j-m,i+m,n)=True

Next

n=n+1

Next:Next

‘********初始化获胜组合结束*************************************

Fori=0ToUBound(pWin,3)’由于电脑已下了(9,9)位所以需要重新设定玩家的获胜标志

IfpWin(9,9,i)=TrueThenpFlag(i)=False

Next

EndSub

PublicFunctionDrawChessBoard()AsLong

‘容器的(BoxL,BoxT)为左上角坐标画一个BoxN*BoxN,每格边长为BoxW象素的棋盘

DimiAsLong,jAsLong,cxAsLong,cyAsLong

Me.ScaleMode=3:Me.FillStyle=1:Me.AutoRedraw=True:Me.Cls

Fori=0ToBoxN’画棋盘

Me.Line(BoxL+i*BoxW,BoxT)-(BoxL+i*BoxW,BoxT+BoxN*BoxW)

Me.Line(BoxL,BoxT+i*BoxW)-(BoxL+BoxN*BoxW,BoxT+i*BoxW)

Me.CurrentX=BoxL+i*BoxW-IIf(i>9,6,2)

Me.CurrentY=BoxT-20:Me.PrintFormat(i)

Me.CurrentX=BoxL-IIf(i>9,23,20)

Me.CurrentY=BoxT+i*BoxW-6:Me.PrintFormat(i)

Next

Fori=:Forj=’画小标志

cx=BoxL+j*BoxW-3:cy=BoxT+i*BoxW-3

Me.Line(cx,cy)-(cx+6,cy+6),,B

Next:Next

Me.AutoRedraw=False:SetMe.Picture=Me.Image

EndFunction

PublicSubCheckWin()

‘*****************************************************************************

‘模块名称:CheckWin[获胜检查算法]’描述:1.检查是否和棋。2.检查电脑是否获胜。3.检查玩家是否获胜。

‘*****************************************************************************

DimiAsLong,jAsLong,kAsLong,mAsLong,nAsLong

DimcAAsLong,pAAsLong,cNAsLong

Fori=0ToUBound(cFlag):cN=IIf(cFlag(i)=False,cN+1,cN):Next

IfcN=UBound(cFlag)-1Then’设定和棋规则

Label1.Caption=”双方和棋!”:ThePlayFlag=False:ExitSub

EndIf

Fori=0ToUBound(cFlag)’检查电脑是否获胜

IfcFlag(i)=TrueThen

cA=0:Forj=0ToBoxN:Fork=0ToBoxN

IfTable(j,k)=1AndcWin(j,k,i)=TrueThencA=cA+1

Next:Next

IfcA=5ThenLabel1.Caption=”电脑获胜!”:ThePlayFlag=False:ExitSub

EndIf

Next

Fori=0ToUBound(pFlag)’检查玩家是否获胜

IfpFlag(i)=TrueThen

pA=0:Forj=0ToBoxN:Fork=0ToBoxN

IfTable(j,k)=2AndpWin(j,k,i)=TrueThenpA=pA+1

Next:Next

IfpA=5ThenLabel1.Caption=”玩家获胜!”:ThePlayFlag=False:ExitSub

EndIf

Next

EndSub

PublicSubDianNao()

‘*****************************************************************************

‘模块名称:DianNao[电脑算法]

‘描述:1.初始化赋值系统。2.赋值加强算法。3.计算电脑和玩家的**攻击位。

‘4.比较电脑和玩家的**攻击位并决定电脑的**策略。5.执行检查获胜函数。

‘*****************************************************************************

DimiAsLong,jAsLong,kAsLong,mAsLong,nAsLong

DimDcAsLong,cAbAsLong,pAbAsLong

ReDimPsCore(BoxN,BoxN)AsLong,CsCore(BoxN,BoxN)AsLong’初始化赋值数组

‘********电脑加强算法********

Fori=0ToUBound(cFlag)

IfcFlag(i)=TrueThen

cAb=0

Forj=0ToBoxN:Fork=0ToBoxN

IfTable(j,k)=1AndcWin(j,k,i)=TrueThencAb=cAb+1

Next:Next

SelectCasecAb

Case3

Form=0ToBoxN:Forn=0ToBoxN

IfTable(m,n)=0AndcWin(m,n,i)=TrueThenCsCore(m,n)=CsCore(m,n)+5

Next:Next

Case4

Form=0ToBoxN:Forn=0ToBoxN

playchess是什么意思

IfTable(m,n)=0AndcWin(m,n,i)=TrueThen

Table(m,n)=1:Label1.Caption=”下一步白方”

Me.FillColor=vbBlack:Me.Circle(m*BoxW+BoxL,n*BoxW+BoxT),8

ForDc=0ToUBound(pWin,3)

IfpWin(m,n,Dc)=TrueThenpFlag(Dc)=False:CallCheckWin:ExitSub

Next

EndIf

Next:Next

EndSelect

EndIf

Next

Fori=0ToUBound(pFlag)

IfpFlag(i)=TrueThen

pAb=0

Forj=0ToBoxN:Fork=0ToBoxN

IfTable(j,k)=2AndpWin(j,k,i)=TrueThenpAb=pAb+1

Next:Next

SelectCasepAb

Case3

Form=0ToBoxN:Forn=0ToBoxN

IfTable(m,n)=0AndpWin(m,n,i)=TrueThenPsCore(m,n)=PsCore(m,n)+30

Next:Next

Case4

Form=0ToBoxN:Forn=0ToBoxN

IfTable(m,n)=0AndpWin(m,n,i)=TrueThen

Table(m,n)=1:Label1.Caption=”下一步白方”

Me.FillColor=vbBlack:Me.Circle(m*BoxW+BoxL,n*BoxW+BoxT),8

ForDc=0ToUBound(pWin,3)

IfpWin(m,n,Dc)=TrueThenpFlag(Dc)=False:CallCheckWin:ExitSub

Next

EndIf

Next:Next

EndSelect

EndIf

Next

‘********电脑加强算法结束********

‘********赋值系统****************

Fori=0ToUBound(cFlag)

IfcFlag(i)=TrueThen

Forj=0ToBoxN:Fork=0ToBoxN

If(Table(j,k)=0)AndcWin(j,k,i)Then

Form=0ToBoxN:Forn=0ToBoxN

If(Table(m,n)=1)AndcWin(m,n,i)ThenCsCore(j,k)=CsCore(j,k)+1

Next:Next

EndIf

Next:Next

EndIf

Next

Fori=0ToUBound(pFlag)

IfpFlag(i)=TrueThen

Forj=0ToBoxN:Fork=0ToBoxN

If(Table(j,k)=0)AndpWin(j,k,i)Then

Form=0ToBoxN:Forn=0ToBoxN

If(Table(m,n)=2)AndpWin(m,n,i)ThenPsCore(j,k)=PsCore(j,k)+1

Next:Next

EndIf

Next:Next

EndIf

Next

‘********赋值系统结束************

‘********分值比较算法************

DimaAsLong,bAsLong,cAsLong,dAsLong

DimcSAsLong,pSAsLong

Fori=0ToBoxN:Forj=0ToBoxN

IfCsCore(i,j)>cSThencS=CsCore(i,j):a=i:b=j

Next:Next

Fori=0ToBoxN:Forj=0ToBoxN

IfPsCore(i,j)>pSThenpS=PsCore(i,j):c=i:d=j

Next:Next

IfcS>pSThen

Table(a,b)=1:Label1.Caption=”下一步白方”

Me.FillColor=vbBlack:Me.Circle(a*BoxW+BoxL,b*BoxW+BoxT),8

Fori=0ToUBound(pWin,3)

IfpWin(a,b,i)=TrueThenpFlag(i)=False

Next

Else

Table(c,d)=1:Label1.Caption=”下一步白方”

Me.FillColor=vbBlack:Me.Circle(c*BoxW+BoxL,d*BoxW+BoxL),8

Fori=0ToUBound(pWin,3)

IfpWin(c,d,i)=TrueThenpFlag(i)=False

Next

EndIf

‘********分值比较算法结束********

CallCheckWin

EndSub

PublicFunctionNumsWin(ByValnAsLong)AsLong

‘根据输入的棋盘布局n*n计算总共有多少种获胜组合

‘假定棋盘为10*10相应的棋盘数组就是Table(9,9)

‘水向每一列获胜组合是6共10列6*10=60

‘垂直方向每一行获胜组合是6共10行8*10=60

‘正对角线方向6+(5+4+3+2+1)*2=36

‘反对角线方向6+(5+4+3+2+1)*2=36

‘总的获胜组合数为60+60+36+36=

DimiAsLong,tAsLong

Fori=n–1:t=t+i:Next

NumsWin=2*(2*t+n-4)+2*n*(n-4)

EndFunction

你这样改改试试吧

while(1)

    {

        游戏中的其他条件

        if (p==31)

        {

            printf("你输了\n“)

            break

        }

        if(p==64)

        {

            printf("你赢了\n“)

            break

        }        

    }