当前位置:编程学习 > C/C++ >>

C++编写五子棋游戏

要怎么用C++编写一个五子棋游戏,用符号代替棋子,求大致思路,当然能写出详细步骤及代码的更好,本人C++初级水平,谢绝直接一串代码,看不懂
答案:#ifndef _LUFFAR_H_
#define _LUFFAR_H_
#include "shell.h"

//  Visa upp informationen
class CMessagePad
{
private:
 int x0,y0,x1,y1;
 int m_nShadow;

 //  ruta d剅 texten ska visas
 int mx0,my0,mx1,my1;
 int m_nLineSpace, m_nLines, m_nCurrentLine;
public:
 CMessagePad();
 void ScrollMessages();
 void Draw();
 void Message(char* msg);
};

class CPlayer
{
private:
 BOOL m_bComputer; //  Om det 剅 dator som k攔.
 int m_nPlayer; //  Vilken spelare det 剅
public:
 CPlayer(int p) {m_bComputer = FALSE; m_nPlayer=p;}
 void ChangePlayer(BOOL com) {m_bComputer = com;}
 int WhichPlayer()  {return m_nPlayer;}
 BOOL IsComputer() {return m_bComputer;}
};

class CBoard
{
private:
 //  V剅det 0 om platsen 剅 tom, 1 f攔 spelaren 1, 2, f攔 spelare 2
 int m_nBoard[MAX_X][MAX_Y];

 //  Var schackbr刣e ligger p?sk剅men.
 int x0,y0,x1,y1; //  Positionen p?br刣et
 int m_nMargin; // Hur stor Marginal det br刣et ska ha
 int m_nShadow; // Hur l唍gt skuggan det ska vara
 int m_nCellX; //  Storleken p?en cell p?br刣et
 int m_nCellY;
 CPlayer* m_pPlayer1;
 CPlayer* m_pPlayer2;
 int m_nWhoBegins;
 CPlayer* m_pCurrentPlayer;
 BOOL m_bIsEmpty;

 //  Skapa bilder i minnet och anv刵da PutImage() sedan
 void CreateImages();
 void *m_pImage1, *m_pImage2;
 CPoint m_lastPt;
 CPoint m_nextlPt; //  N剆t sista punkten

 //  Kalkylera ut hur m唍ga i rad det finns i ett visst h唋l
 int Calculate(int x,int y,Direction d,int player=-1);
 CPoint Analyse(int x, int y, int count,int param=0);

 char msg[30];
 CPoint RandomPoint();
 CPoint Think();
 CPoint GetEndPoint(int x, int y, Direction d, BOOL& closed); //  Returnera punkten efter den sista punkten i en viss rad
 CPoint FindDangerPt(int player);

 BOOL m_bSearchAll;
 CPoint SearchAll(int,int, int param=0);
public:
 CBoard(CPlayer* p1,CPlayer* p2);
 ~CBoard();
 void ResetBoard();

 void Draw();
 int Go(); //  L唗 current player g攔a n剆ta drag, returnera vinnare om det finns
 int GetWinner();
 void ShowWinner(int x,int y,Direction start,int player=-1);
};
#endif

------------------------------------------------------------------------

////////////////////////////////////////////////////
//
//  Mouse.h  by Yuheng Zhao
//
////////////////////////////////////////////////////

#ifndef _MOUSE_H_
#define _MOUSE_H_

void InitMouse();
void ShowPoint();
void SetPoint(unsigned int x,unsigned int y);
void HidePoint();
void HidePointXY(unsigned int cordx,unsigned int cordy,unsigned int x,unsigned int y);
void ReleaseXY(int &xcordi,int &ycordi,unsigned int bbutt);
void PressXY(int &xcordi,int &ycordi,unsigned int bbutt);
void ReadMouse(int &x,int &y,int &b);
void Limits(unsigned int minx,unsigned maxX,unsigned miny,unsigned maxY);
int MouseSize();

#endif

--------------------------------------------------------------------------------

////////////////////////////////////////////////////
//
//  Shell.H  by Yuheng Zhao
//
////////////////////////////////////////////////////

#ifndef _SHELL_H_
#define _SHELL_H_
#include "luffar.h"

void InitGraphics();
void Cls();

void DrawBackground();
char ReadKey();
void Rectangle(int,int,int,int,int,BOOL shadow=FALSE,int deep=0);

void WaitDlg(int nMode=0, int nDelay=0);
int ShowWinDlg(CPlayer* winner);

void IntToChar(int, char*);
void Message(char*);
#endif

-----------------------------------------------------------

////////////////////////////////////////////////////
//
//  Types.H  by Yuheng Zhao
//
////////////////////////////////////////////////////


#ifndef _TYPES_H_
#define _TYPES_H_

#include <iostream.h>
#include <graphics.h> // c++ grafik,Inte sj刲v gjorda. ( ska 刵d?inte g攔a n唃ot grafisk avancerat sak )
#include <stdlib.h>
#include <process.h>
#include <string.h>
#include <alloc.h>
#include <dos.h>

#define MAX_X 19
#define MAX_Y 19

#define SCR_MAX_X 639
#define SCR_MAX_Y 479

#define NOCOLOR -1
#define BLACK  0
#define BLUE 1
#define GREEN 2
#define CYAN 3
#define RED  4
#define MAGENTA 5
#define BROWN 6
#define LGRAY 7
#define DGRAY 8
#define LBLUE 9
#define LGREEN 10
#define LCYAN 11
#define LRED 12
#define LMAGENTA 13
#define YELLOW 14
#define WHITE 15

enum BOOL{TRUE=1, FALSE=0};
enum Direction {LEFT,UPLEFT,UP,UPRIGHT,RIGHT,DOWNRIGHT,DOWN,DOWNLEFT};

class CPoint
{
public:
 int x,y;
 CPoint() {x=-1;y=-1;}
 CPoint(int xx,int yy) {x=xx; y=yy;}
 CPoint(const CPoint* pt) {x=pt->x; y=pt->y;}

 BOOL operator== (const CPoint& pt) const;
 const CPoint& operator= (const CPoint& pt);
};

class CRect
{
public:
 int x0,y0,x1,y1;
 CRect(int xx0,int yy0,int xx1,int yy1) {x0=xx0; y0=yy0; x1=xx1; y1=yy1;}
 CRect(const CRect* r)  {x0=r->x0; y0=r->y0; x1=r->x1; y1=r->y1;}
 const CRect& operator= (const CRect& pt);

 BOOL PtInRect(const CPoint& pt);
 void Draw(int,int lineColor=NOCOLOR,BOOL shadow=FALSE,int deep=0);
};

class CButton
{
public:
 CRect m_Rect;
 char* m_pchName;
 BOOL m_bPressed;

 CButton(const CRect& rect,char* ch);
 ~CButton() {delete m_pchName;}
 void Draw();
//  Kolla om n唃on har klickat p?knappen
 BOOL Clicked(int,int,int);
 void SetWindowText(char*);
};

#endif


 

这个你若是用vc写的话,有挑战性啊,首先棋盘的绘制你要想方法,但是有控件,不过光看这个控件的代码就够你受的,其次就是关键中的关键啊如何用电脑判断怎么走,其实我又想过就是用易做图数组的方法,多层循环嵌套,但是没实践,还有棋盘的画法我也想过就是用图片框代替,创建棋盘数组,全用素组的话对应好下标,就转化为数学问题了,这时就可以添加约束了。总之就是思路,算法的问题,算法必看啊

http://blog.csdn.net/leiixing/archive/2008/06/25/2586700.aspx

详细解答

这个的难度在于它的算法。你可以参考一下网上的算法。

 思路嘛、很简单:

你可以给电脑制定一些“本能”或者“规则”、比如我下了3个子连在一起了那么电脑就要堵,等等。。。。。。。

当我下了一个子了,电脑就计算接下来自己(指电脑)走每一步的每一个可能性,然后设计出最佳下棋的步骤、你可以规定电脑能计算接下来能计算几步棋、那么就可以规定简单级别(比如能计算10步棋)、普通级别(15步棋)、专家级别(20步棋)、

 

大致思路、其实我没写过、打算最近几天写、、可是没有时间(寒假作业没做完______)

这个我写过,不过是好几个月以前了,其实也并不是很难不过我写的是两个人对棋的程序,是用vc写的。

要是做到用c来实现人机对下的话,可能要考虑的很多因为要涉及到每一次电脑自己判断,也就是说在每个位置都要尤其优先级,就是说要运算出这里下一步棋这里一步棋要比下在别处要好。其中的运算要涉及到很多。其实本身不难,难的是是如何让电脑自己判断该下载那里。

人机对战有点难度啊

先学习双人对战把

两人对战,就棋子一个对象需要考虑,可单独写个类描述棋子的属性和方法。具体为落子,判断是否五子成线,这是面向对象编程的思路,供参考
真要的话,可以发给你,留下邮箱~~

上一个:C++ 是什么?
下一个:C++里STL和ATL是什么?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,