我来教大家“聚玩麻将有挂是真的吗”(确实是有挂)-哔哩哔哩

网上有关“用VC++编写一个五子棋小游戏”话题很是火热,小编也是针对用VC++编写一个五子棋小游戏寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

您好:手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,咨询加微信【】很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的
http://www.boyicom.net/sheng/1.jpg
1.手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,通过添加客服微信 2.咨询软件加微信【】在"设置DD功能DD微信手麻工具"里.点击"开启". 3.打开工具.在"设置DD新消息提醒"里.前两个选项"设置"和"连接软件"均勾选"开启"(好多人就是这一步忘记做了) 4.打开某一个微信组.点击右上角.往下拉."消息免打扰"选项.勾选"关闭"(也就是要把"群消息的提示保持在开启"的状态.这样才能触系统发底层接口)

在tubor c下运行的程序,最短的

#include<stdio.h>

#include<stdlib.h>

#include<graphics.h>

#include<bios.h>

#include<conio.h>

/*编译预处理,定义按键码*/

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

/*若想在游戏中途退出, 可按 Esc 键*/

#define ESC 0x011b

/*SPACE键表示落子*/

#define SPACE 0x3920

/*设置偏移量*/

#define OFFSET 20

#define OFFSET_x 4

#define OFFSET_y 3

/*定义数组大小*/

#define N 19

/*定义全局变量*/

int status[N][N]; /*定义的数组,保存状态*/

int step_x,step_y;/*行走的坐标*/

int key ; /*获取按下的键盘的键*/

int flag; /*玩家标志*/

/*自定义函数原型*/

void DrawBoard();

void DrawCircle(int x,int y,int color);

void Alternation();

void JudgePlayer(int x,int y);

void Done();

int ResultCheck(int x,int y);

void WelcomeInfo();

void ShowMessage();

/*定义函数*/

/*显示欢迎信息函数*/

void WelcomeInfo()

{

char ch ;

/*移动光标到指定位置*/

gotoxy(12,4);

/*显示欢迎信息*/

printf("Welcome you to gobang word!");

gotoxy(12,6);

printf("1.You can use the up,down,left and right key to move the chessman,");

gotoxy(12,8);

printf(" and you can press Space key to enter after you move it !");

gotoxy(12,10);

printf("2.You can use Esc key to exit the game too !");

gotoxy(12,12);

printf("3.Don not move the pieces out of the chessboard !");

gotoxy(12,14);

printf("DO you want to continue ?(Y/N)");

ch=getchar();

/*判断程序是否要继续进行*/

if(ch=='n'||ch=='N')

/*如果不继续进行,则推出程序*/

exit(0);

}

/*画棋盘函数*/

void DrawBoard()

{

int x1,x2;

int y1,y2;

/*设置背景色*/

setbkcolor(2);

/*设置线条颜色*/

setcolor(1);

/*设置线条风格、宽度*/

setlinestyle(DOTTED_LINE,1,1);

/*按照预设的偏移量开始画棋盘*/

for(x1=1,y1=1,y2=18;x1<=18;x1++)

line((x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x1+OFFSET_x)*OFFSET,(y2+OFFSET_y)*OFFSET);

for(x1=1,y1=1,x2=18;y1<=18;y1++)

line((x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x2+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET);

/*将各个点的状态设置为0*/

for(x1=1;x1<=18;x1++)

for(y1=1;y1<=18;y1++)

status[x1][y1]=0;

/*显示帮助信息*/

setcolor(14);

/*设置字体、大小*/

settextstyle(1,0,1);

outtextxy((19+OFFSET_x)*OFFSET,(2+OFFSET_y)*OFFSET,"Player key:");

setcolor(9);

settextstyle(3,0,1);

outtextxy((19+OFFSET_x)*OFFSET,(4+OFFSET_y)*OFFSET,"UP--up ");

outtextxy((19+OFFSET_x)*OFFSET,(6+OFFSET_y)*OFFSET,"DOWN--down ");

outtextxy((19+OFFSET_x)*OFFSET,(8+OFFSET_y)*OFFSET,"LEFT--left");

outtextxy((19+OFFSET_x)*OFFSET,(10+OFFSET_y)*OFFSET,"RIGHT--right");

outtextxy((19+OFFSET_x)*OFFSET,(12+OFFSET_y)*OFFSET,"ENTER--space");

setcolor(14);

settextstyle(1,0,1);

outtextxy((19+OFFSET_x)*OFFSET,(14+OFFSET_y)*OFFSET,"Exit:");

setcolor(9);

settextstyle(3,0,1);

outtextxy((19+OFFSET_x)*OFFSET,(16+OFFSET_y)*OFFSET,"ESC");

}

/*画圆函数*/

void DrawCircle(int x,int y,int color)

{

setcolor(color);

/*设置画圆线条的风格,宽度,这里设置为虚线*/

setlinestyle(SOLID_LINE,0,1);

x=(x+OFFSET_x)*OFFSET;

y=(y+OFFSET_y)*OFFSET;

/*以(x,y)为圆心,8为半径画圆*/

circle(x,y,8);

}

/*交换行棋方函数*/

void Alternation()

{

if(flag==1)

flag=2 ;

else

flag=1 ;

}

/*对不同的行棋方画不同颜色的圆函数*/

void JudgePlayer(int x,int y)

{

if(flag==1)

DrawCircle(x,y,15);

if(flag==2)

DrawCircle(x,y,4);

}

/*判断当前行棋方是否获胜函数*/

int ResultCheck(int x,int y)

{

int j,k;

int n1,n2 ;

while(1)

{

/*对水平方向进行判断是否有5个同色的圆*/

n1=0;

n2=0;

/*水平向左数*/

for(j=x,k=y;j>=1;j--)

{

if(status[j][k]==flag)

n1++;

else

break;

}

/*水平向右数*/

for(j=x,k=y;j<=18;j++)

{

if(status[j][k]==flag)

n2++;

else

break;

}

if(n1+n2-1>=5)

{

return(1);

}

/*对垂直方向进行判断是否有5个同色的圆*/

n1=0;

n2=0;

/*垂直向上数*/

for(j=x,k=y;k>=1;k--)

{

if(status[j][k]==flag)

n1++;

else

break ;

}

/*垂直向下数*/

for(j=x,k=y;k<=18;k++)

{

if(status[j][k]==flag)

n2++;

else

break ;

}

if(n1+n2-1>=5)

{

return(1);

}

/*从左上方到右下方进行判断是否有5个同色的圆*/

n1=0;

n2=0;

/*向左上方数*/

for(j=x,k=y;(j>=1)&&(k>=1);j--,k--)

{

if(status[j][k]==flag)

n1++;

else

break;

}

/*向右下方数*/

for(j=x,k=y;(j<=18)&&(k<=18);j++,k++)

{

if(status[j][k]==flag)

n2++;

else

break;

}

if(n1+n2-1>=5)

{

return(1);

}

/*从右上方到左下方进行判断是否有5个同色的圆*/

n1=0;

n2=0;

/*向右上方数*/

for(j=x,k=y;(j<=18)&&(k>=1);j++,k--)

{

if(status[j][k]==flag)

n1++;

else

break;

}

/*向左下方数*/

for(j=x,k=y;(j>=1)&&(k<=18);j--,k++)

{

if(status[j][k]==flag)

n2++;

else

break;

}

if(n1+n2-1>=5)

{

return(1);

}

return(0);

}

}

/*执行下棋函数*/

void Done()

{

int i ;

int j ;

/*根据不同的key值进行不同的操作*/

switch(key)

{

/*如果是向左移动的*/

case LEFT:

/*如果下一步超出棋盘左边界则什么也不作*/

if(step_x-1<0)

break ;

else

{

for(i=step_x-1,j=step_y;i>=1;i--)

if(status[j]==0)

{

DrawCircle(step_x,step_y,2);

break ;

}

if(i<1)

break ;

step_x=i ;

JudgePlayer(step_x,step_y);

break ;

}

/*如果是向右移动的*/

case RIGHT :

/*如果下一步超出棋盘右边界则什么也不作*/

if(step_x+1>18)

break ;

else

{

for(i=step_x+1,j=step_y;i<=18;i++)

if(status[j]==0)

{

/*每移动一步画一个圆,显示移动的过程*/

DrawCircle(step_x,step_y,2);

break ;

}

if(i>18)break ;

step_x=i ;

/*根据不同的行棋者画不同颜色的圆*/

JudgePlayer(step_x,step_y);

/*显示行棋一方是谁*/

break ;

}

/*如果是向下移动的*/

case DOWN :

/*如果下一步超出棋盘下边界则什么也不作*/

if((step_y+1)>18)

break ;

else

{

for(i=step_x,j=step_y+1;j<=18;j++)

if(status[j]==0)

{

DrawCircle(step_x,step_y,2);

break ;

}

if(j>18)break ;

step_y=j ;

JudgePlayer(step_x,step_y);

break ;

}

/*如果是向上移动的*/

case UP :

/*如果下一步超出棋盘上边界则什么也不作*/

if((step_y-1)<0)

break ;

else

{

for(i=step_x,j=step_y-1;j>=1;j--)

if(status[j]==0)

{

DrawCircle(step_x,step_y,2);

break ;

}

if(j<1)break ;

step_y=j ;

JudgePlayer(step_x,step_y);

break ;

}

/*如果是退出键*/

case ESC :

break ;

/*如果是确定键*/

case SPACE:

/*如果操作是在棋盘之内*/

if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)

{

/*按下确定键后,如果棋子当前位置的状态为0*/

if(status[step_x][step_y]==0)

{

/*则更改棋子当前位置的状态在flag,表示是哪个行棋者行的棋*/

status[step_x][step_y]=flag ;

/*如果判断当前行棋者获胜*/

if(ResultCheck(step_x,step_y)==1)

{

/*以指定频率打开PC扬声器*/

sound(1000);

/*扬声器的发生时间,为1秒钟*/

delay(1000);

nosound();

gotoxy(30,4);

setbkcolor(BLUE);

/*清除图形屏幕*/

cleardevice();

/*为图形输出设置当前视口*/

setviewport(100,100,540,380,1);

/*绿色实填充*/

setfillstyle(1,2);

setcolor(YELLOW);

rectangle(0,0,439,279);

floodfill(50,50,14);

setcolor(12);

settextstyle(1,0,5);

/*三重笔划字体, 水平放大5倍*/

outtextxy(20,20,"Congratulation !");

setcolor(15);

settextstyle(3,0,4);

/*如果是Player1获胜,显示获胜信息*/

if(flag==1)

{

/*无衬笔划字体, 水平放大5倍*/

outtextxy(20,120,"Player1 win the game !");

}

/*如果是Player1获胜,显示获胜信息*/

if(flag==2)

{

/*无衬笔划字体, 水平放大5倍*/

outtextxy(20,120,"Player2 win the game !");

}

setcolor(14);

settextstyle(2,0,8);

getch();

exit(0);

}

/*如果当前行棋者没有获胜,则交换行棋方*/

Alternation();

/*提示行棋方是谁*/

ShowMessage();

break;

}

}

else

break ;

}

}

/*显示行棋方函数*/

void ShowMessage()

{

/*轮到Player1行棋*/

if(flag==1)

{

setcolor(2);

settextstyle(1,0,1);

gotoxy(100,30);

/*覆盖原有的字迹*/

outtextxy(100,30,"It's turn to Player2 !");

setcolor(12);

settextstyle(1,0,1);

outtextxy(100,30,"It's turn to Player1 !");

}

/*轮到Player2行棋*/

if(flag==2)

{

setcolor(2);

settextstyle(1,0,1);

/*覆盖原有的字迹*/

outtextxy(100,30,"It's turn to Player1 !");

setcolor(12);

settextstyle(1,0,1);

gotoxy(100,20);

outtextxy(100,30,"It's turn to Player2 !");

}

}

/*主函数*/

int main()

{

int gdriver;

int gmode;

int errorcode;

/*清空文本模式窗口*/

clrscr();

/*显示欢迎信息*/

WelcomeInfo();

gdriver=DETECT;

gmode=0;

/*初始化图形系统*/

registerbgidriver(EGAVGA_driver); //把驱动程序装入到执行程序中,方法见独立图形程序的建立一文

initgraph(&gdriver,&gmode,"");

/*返回最后一次不成功的图形操作的错误代码*/

errorcode=graphresult();

if (errorcode!= grOk)

{

/*根据错误代码输出错误信息串*/

printf("\nNotice:Error occured when grphics initialization: %s\n",grapherrormsg(errorcode));

printf("Press any key to quit!");

getch();

exit(1);

}

/*设置flag初始值,默认是Player1先行*/

flag=1;

/*画棋盘*/

DrawBoard();

ShowMessage();

do

{

step_x=0 ;

step_y=0 ;

JudgePlayer(step_x-1,step_y-1);

do

{

/*如果没有键按下,则bioskey(1)函数将返回0*/

while(bioskey(1)==0);

/*获取从键盘按下的键值*/

key=bioskey(0);

/*根据获得的键值进行下棋操作*/

Done();

}while(key!=SPACE&&key!=ESC);

}while(key!=ESC);

/*关闭图形系统*/

closegraph();

return 0;

}

C语言设计出的鼠标操作的五子棋源代码

// game.cpp : Defines the class behaviors for the application.

//

#include "stdafx.h"

#include "game.h"

#include "MainFrm.h"

#include "gameDoc.h"

#include "gameView.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CGameApp

BEGIN_MESSAGE_MAP(CGameApp, CWinApp)

//{{AFX_MSG_MAP(CGameApp)

ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

// NOTE - the ClassWizard will add and remove mapping macros here.

// DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG_MAP

// Standard file based document commands

ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)

ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

// Standard print setup command

ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CGameApp construction

CGameApp::CGameApp()

{

// TODO: add construction code here,

// Place all significant initialization in InitInstance

}

/////////////////////////////////////////////////////////////////////////////

// The one and only CGameApp object

CGameApp theApp;

/////////////////////////////////////////////////////////////////////////////

// CGameApp initialization

BOOL CGameApp::InitInstance()

{

AfxEnableControlContainer();

// Standard initialization

// If you are not using these features and wish to reduce the size

// of your final executable, you should remove from the following

// the specific initialization routines you do not need.

#ifdef _AFXDLL

Enable3dControls(); // Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when linking to MFC statically

#endif

// Change the registry key under which our settings are stored.

// TODO: You should modify this string to be something appropriate

// such as the name of your company or organization.

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

LoadStdProfileSettings(); // Load standard INI file options (including MRU)

// Register the application's document templates. Document templates

// serve as the connection between documents, frame windows and views.

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(

IDR_MAINFRAME,

RUNTIME_CLASS(CGameDoc),

RUNTIME_CLASS(CMainFrame), // main SDI frame window

RUNTIME_CLASS(CGameView));

AddDocTemplate(pDocTemplate);

// Parse command line for standard shell commands, DDE, file open

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);

// Dispatch commands specified on the command line

if (!ProcessShellCommand(cmdInfo))

return FALSE;

// The one and only window has been initialized, so show and update it.

m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->UpdateWindow();

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

// No message handlers

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

// App command to run the dialog

void CGameApp::OnAppAbout()

{

CAboutDlg aboutDlg;

aboutDlg.DoModal();

}

/////////////////////////////////////////////////////////////////////////////

// CGameApp message handlers

// game.h : main header file for the GAME application

//

#if !defined(AFX_GAME_H__37B9417B_40F7_4755_AD5E_9C78039ECD55__INCLUDED_)

#define AFX_GAME_H__37B9417B_40F7_4755_AD5E_9C78039ECD55__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH

#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////

// CGameApp:

// See game.cpp for the implementation of this class

//

class CGameApp : public CWinApp

{

public:

CGameApp();

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CGameApp)

public:

virtual BOOL InitInstance();

//}}AFX_VIRTUAL

// Implementation

//{{AFX_MSG(CGameApp)

afx_msg void OnAppAbout();

// NOTE - the ClassWizard will add and remove member functions here.

// DO NOT EDIT what you see in these blocks of generated code !

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_GAME_H__37B9417B_40F7_4755_AD5E_9C78039ECD55__INCLUDED_)

// gameDoc.cpp : implementation of the CGameDoc class

//

#include "stdafx.h"

#include "game.h"

#include "gameDoc.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CGameDoc

IMPLEMENT_DYNCREATE(CGameDoc, CDocument)

BEGIN_MESSAGE_MAP(CGameDoc, CDocument)

//{{AFX_MSG_MAP(CGameDoc)

// NOTE - the ClassWizard will add and remove mapping macros here.

// DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CGameDoc construction/destruction

CGameDoc::CGameDoc()

{

// TODO: add one-time construction code here

}

CGameDoc::~CGameDoc()

{

}

BOOL CGameDoc::OnNewDocument()

{

if (!CDocument::OnNewDocument())

return FALSE;

// TODO: add reinitialization code here

// (SDI documents will reuse this document)

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////

// CGameDoc serialization

void CGameDoc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{

// TODO: add storing code here

}

else

{

// TODO: add loading code here

}

}

/////////////////////////////////////////////////////////////////////////////

// CGameDoc diagnostics

#ifdef _DEBUG

void CGameDoc::AssertValid() const

{

CDocument::AssertValid();

}

void CGameDoc::Dump(CDumpContext& dc) const

{

CDocument::Dump(dc);

}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////

// CGameDoc commands

// gameDoc.h : interface of the CGameDoc class

//

/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_GAMEDOC_H__3747CE70_C9E0_4B2C_9C92_6A1AFA62F929__INCLUDED_)

#define AFX_GAMEDOC_H__3747CE70_C9E0_4B2C_9C92_6A1AFA62F929__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

class CGameDoc : public CDocument

{

protected: // create from serialization only

CGameDoc();

DECLARE_DYNCREATE(CGameDoc)

// Attributes

public:

// Operations

public:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CGameDoc)

public:

virtual BOOL OnNewDocument();

virtual void Serialize(CArchive& ar);

//}}AFX_VIRTUAL

// Implementation

public:

virtual ~CGameDoc();

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Generated message map functions

protected:

//{{AFX_MSG(CGameDoc)

// NOTE - the ClassWizard will add and remove member functions here.

// DO NOT EDIT what you see in these blocks of generated code !

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_GAMEDOC_H__3747CE70_C9E0_4B2C_9C92_6A1AFA62F929__INCLUDED_)

// gameView.cpp : implementation of the CGameView class

//

#include "stdafx.h"

#include "game.h"

#include "math.h"

#include "gameDoc.h"

#include "gameView.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CGameView

IMPLEMENT_DYNCREATE(CGameView, CView)

BEGIN_MESSAGE_MAP(CGameView, CView)

//{{AFX_MSG_MAP(CGameView)

ON_WM_LBUTTONDOWN()

//}}AFX_MSG_MAP

// Standard printing commands

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CGameView construction/destruction

CGameView::CGameView()

{

// TODO: add construction code here

count=0;

for(int i=0;i<=10;i++)

for(int j=0;j<=10;j++)

Board[i][j]=0;

m_bBitmap.LoadBitmap(IDB_BITMAP1);

m_wBitmap.LoadBitmap(IDB_BITMAP2);

m_bBitmap.GetObject(sizeof(bmInfo_b),&bmInfo_b);

m_wBitmap.GetObject(sizeof(bmInfo_w),&bmInfo_w);//构造函数中初始化各变量

}

CGameView::~CGameView()

{

}

BOOL CGameView::PreCreateWindow(CREATESTRUCT& cs)

{

// TODO: Modify the Window class or styles here by modifying

// the CREATESTRUCT cs

return CView::PreCreateWindow(cs);

}

/////////////////////////////////////////////////////////////////////////////

// CGameView drawing

void CGameView::OnDraw(CDC* pDC)//绘制棋盘

{

CGameDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CBrush brush(RGB(255,255,255));//背景色 白色

pDC->SelectObject(&brush);

HRGN Rgn;

Rgn=CreateRectRgn(0,0,500,500);

FrameRgn(*pDC,Rgn,brush,500,500);

CPen pen;

pen.CreatePen(PS_SOLID,1,RGB(0,0,0));//实线 黑色

for(int i=0;i<=10;i++)

{

pDC->MoveTo(40,25*(i)+40);

pDC->LineTo(290,25*(i)+40);

}//绘横线

for( i=0;i<=10;i++){

pDC->MoveTo(25*(i)+40,40);

pDC->LineTo(25*(i)+40,290);

}//绘竖线

for( i=0;i<=10;i++)

for(int j=0;j<=10;j++)

Board[i][j]=0;//清空旗子

}

/////////////////////////////////////////////////////////////////////////////

// CGameView printing

BOOL CGameView::OnPreparePrinting(CPrintInfo* pInfo)

{

// default preparation

return DoPreparePrinting(pInfo);

}

void CGameView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

// TODO: add extra initialization before printing

}

void CGameView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

// TODO: add cleanup after printing

}

/////////////////////////////////////////////////////////////////////////////

// CGameView diagnostics

#ifdef _DEBUG

void CGameView::AssertValid() const

{

CView::AssertValid();

}

void CGameView::Dump(CDumpContext& dc) const

{

CView::Dump(dc);

}

CGameDoc* CGameView::GetDocument() // non-debug version is inline

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGameDoc)));

return (CGameDoc*)m_pDocument;

}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////

// CGameView message handlers

void CGameView::Draw_Change(CDC* dcComp, CPoint point, int flag,CBitmap& bitmap)

{

BITMAP bmInfo;

bitmap.GetObject(sizeof(bmInfo),&bmInfo);

CDC* dc;

dc=CWnd::GetDC();

for(int i=0;i<=10;i++)

for(int j=0;j<=10;j++)

{

if(fabs(point.x-40-25*i)<bmInfo.bmWidth/2&&fabs(point.y-40-25*j)<bmInfo.bmHeight/2&&Board[i][j]==0)

{

dcComp->SelectObject(&bitmap);

dc->BitBlt(40+25*i-bmInfo.bmWidth/2,40+25*j-bmInfo.bmHeight/2,bmInfo.bmWidth,bmInfo.bmHeight,dcComp,0,0,SRCCOPY);//判断是否在范围内若在载入位图

Board[i][j]=flag;

count++;

}

}

}

void CGameView::Judge()

{

CDC* dc;

dc=CWnd::GetDC();

for(int i=0;i<=6;i++)

for(int j=0;j<=10;j++)

{

if(Board[i][j]!=0)

if(Board[i][j]==Board[i+1][j]&&Board[i][j]==Board[i+2][j]&&Board[i+3][j]==Board[i][j]&&Board[i+4][j]==Board[i][j])

if(Board[i][j]==1)

{

MessageBox("黑胜!");

CGameView::OnDraw(dc);

return;

}

else{

MessageBox("黄赢!");

CGameView::OnDraw(dc);

return;

}

}//判断横行

for(i=0;i<=10;i++)

for(int j=0;j<=6;j++)

{

if(Board[i][j]!=0)

if(Board[i][j]==Board[i][j+1]&&Board[i][j]==Board[i][j+2]&&Board[i][j+3]==Board[i][j]&&Board[i][j]==Board[i][j+4])

if(Board[i][j]==1)

{

MessageBox("黑胜!");

CGameView::OnDraw(dc);

return;

}

else{

MessageBox("黄赢!");

CGameView::OnDraw(dc);

return;

}

}//判断竖行

for(i=0;i<=6;i++)

for(int j=0;j<=6;j++)

{

if(Board[i][j]!=0)

if(Board[i][j]==Board[i+1][j+1]&&Board[i][j]==Board[i+2][j+2]&&Board[i+3][j+3]==Board[i][j]&&Board[i][j]==Board[i+4][j+4])

if(Board[i][j]==1){

MessageBox("黑胜!");

CGameView::OnDraw(dc);

return;}

else{

MessageBox("黄赢!");

CGameView::OnDraw(dc);

return;

}

}//判断右斜

for(i=0;i<=6;i++)

for(int j=4;j<=10;j++)

{

if(Board[i][j]!=0)

if(Board[i][j]==Board[i+1][j-1]&&Board[i][j]==Board[i+2][j-2]&&Board[i+3][j-3]==Board[i][j]&&Board[i][j]==Board[i+4][j-4])

if(Board[i][j]==1)

{

MessageBox("黑赢!");

CGameView::OnDraw(dc);

return;}

else{

MessageBox("黄赢!");

CGameView::OnDraw(dc);

return;

}//判断左斜

}

}

void CGameView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CDC* dc;

dc=CWnd::GetDC();//获得相应的设备环境

CDC dcComp;

dcComp.CreateCompatibleDC(dc);//获得可载入位图的相应设备环境

if(count%2==1)

Draw_Change(&dcComp,point,1,m_bBitmap);

else

Draw_Change(&dcComp,point,2,m_wBitmap);//相应位置载入位图

Judge();//判断输赢

CView::OnLButtonDown(nFlags, point);

}

// gameView.h : interface of the CGameView class

//

/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_GAMEVIEW_H__6D8D2D59_A8FA_4534_AC2A_D610645FB7D0__INCLUDED_)

#define AFX_GAMEVIEW_H__6D8D2D59_A8FA_4534_AC2A_D610645FB7D0__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

class CGameView : public CView

{

protected: // create from serialization only

CGameView();

DECLARE_DYNCREATE(CGameView)

// Attributes

public:

CGameDoc* GetDocument();

// Operations

public:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CGameView)

public:

virtual void OnDraw(CDC* pDC); // overridden to draw this view

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

protected:

virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

//}}AFX_VIRTUAL

// Implementation

public:

void Judge();//判断输赢

void Draw_Change(CDC* dcComp, CPoint point, int flag,CBitmap& bitmap);//判断是否在范围内,载入位图,即落棋子。

virtual ~CGameView();

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <string.h>

#define MAXIMUS 15 //定义棋盘大小

int p[MAXIMUS][MAXIMUS];//存储对局信息

char buff[MAXIMUS*2+1][MAXIMUS*4+3];//输出缓冲器

int Cx,Cy;//当前光标位置

int Now;//当前走子的玩家,1代表黑,2代表白

int wl,wp;//当前写入缓冲器的列数和行数位置

char* showText;//在棋盘中央显示的文字信息

int count;//回合数

char* Copy(char* strDest,const char* strSrc)//修改过的字符串复制函数,会忽略末端的\0

{

char* strDestCopy = strDest;

while (*strSrc!='\0')

{

*strDest++=*strSrc++;

}

return strDestCopy;

}

void Initialize()//初始化一个对局函数

{

int i,j;//循环变量

showText="";//重置显示信息

count=0;//回合数归零

for(i=0;i<MAXIMUS;i++)//重置对局数据

{

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

{

p[i][j]=0;

}

}

Cx=Cy=MAXIMUS/2;//重置光标到中央

Now=1;//重置当前为黑方

}

char* getStyle(int i,int j)//获得棋盘中指定坐标交点位置的字符,通过制表符拼成棋盘

{

if(p[i][j]==1)//1为黑子

return "●";

else if(p[i][j]==2)//2为白子

return "○";

else if(i==0&&j==0)//以下为边缘棋盘样式

return "┏";

else if(i==MAXIMUS-1&&j==0)

return "┓";

else if(i==MAXIMUS-1&&j==MAXIMUS-1)

return "┛";

else if(i==0&&j==MAXIMUS-1)

return "┗";

else if(i==0)

return "┠";

else if(i==MAXIMUS-1)

return "┨";

else if(j==0)

return "┯";

else if(j==MAXIMUS-1)

return "┷";

return "┼";//中间的空位

}

char* getCurse(int i,int j){//获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示

if(i==Cx){

if(j==Cy)

return "┏";

else if (j==Cy+1)

return "┗";

}

else if(i==Cx+1)

{

if(j==Cy)

return "┓";

else if (j==Cy+1)

return "┛";

}

return " ";//如果不在光标附近则为空

}

void write(char* c)//向缓冲器写入字符串

{

Copy(buff[wl]+wp,c);

wp+=strlen(c);

}

void ln()//缓冲器写入位置提行

{

wl+=1;

wp=0;

}

void Display()//将缓冲器内容输出到屏幕

{

int i,l=strlen(showText);//循环变量,中间文字信息的长度

int Offset=MAXIMUS*2+2-l/2;//算出中间文字信息居中显示所在的横坐标位置

if(Offset%2==1)//如果位置为奇数,则移动到偶数,避免混乱

{

Offset--;

}

Copy(buff[MAXIMUS]+Offset,showText);//讲中间文字信息复制到缓冲器

if(l%2==1)//如果中间文字长度为半角奇数,则补上空格,避免混乱

{

*(buff[MAXIMUS]+Offset+l)=0x20;

}

system("cls");//清理屏幕,准备写入

for(i=0;i<MAXIMUS*2+1;i++){//循环写入每一行

printf("%s",buff[i]);

if(i<MAXIMUS*2)//写入完每一行需要换行

printf("\n");

}

}

void Print()//将整个棋盘算出并储存到缓冲器,然后调用Display函数显示出来

{

int i,j;//循环变量

wl=0;

wp=0;

for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环

{

for(i=0;i<=MAXIMUS;i++)

{

write(getCurse(i,j));//写入左上角字符

if(j==0||j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置

{

if(i!=MAXIMUS)

write(" ");

}

else//如果在棋盘中间则用竖线承接上下

{

if(i==0||i==MAXIMUS-1)//左右边缘的竖线更粗

write("┃");

else if(i!=MAXIMUS)//中间的竖线

write("│");

}

}

if(j==MAXIMUS)//如果是最后一次循环,则只需要处理边侧字符,交点要少一排

{

break;

}

ln();//提行开始打印交点内容

write(" ");//用空位补齐位置

for(i=0;i<MAXIMUS;i++)//按横坐标循环正常的次数

{

write(getStyle(i,j));//写入交点字符

if(i!=MAXIMUS-1)//如果不在最右侧则补充一个横线承接左右

{

if(j==0||j==MAXIMUS-1)

{

write("━");//上下边缘的横线更粗

}

else

{

write("—");//中间的横线

}

}

}

ln();//写完一行后提行

}

Display();//将缓冲器内容输出到屏幕

}

int Put(){//在当前光标位置走子,如果非空,则返回0表示失败

if(p[Cx][Cy]==0)

{

p[Cx][Cy]=Now;//改变该位置数据

return 1;//返回1表示成功

}

else

{

return 0;

}

}

int Check()//胜负检查,即判断当前走子位置有没有造成五连珠的情况

{

int w=1,x=1,y=1,z=1,i;//累计横竖正斜反邪四个方向的连续相同棋子数目

for(i=1;i<5;i++)if(Cy+i<MAXIMUS&&p[Cx][Cy+i]==Now)w++;else break;//向下检查

for(i=1;i<5;i++)if(Cy-i>0&&p[Cx][Cy-i]==Now)w++;else break;//向上检查

if(w>=5)return Now;//若果达到5个则判断当前走子玩家为赢家

for(i=1;i<5;i++)if(Cx+i<MAXIMUS&&p[Cx+i][Cy]==Now)x++;else break;//向右检查

for(i=1;i<5;i++)if(Cx-i>0&&p[Cx-i][Cy]==Now)x++;else break;//向左检查

if(x>=5)return Now;//若果达到5个则判断当前走子玩家为赢家

for(i=1;i<5;i++)if(Cx+i<MAXIMUS&&Cy+i<MAXIMUS&&p[Cx+i][Cy+i]==Now)y++;else break;//向右下检查

for(i=1;i<5;i++)if(Cx-i>0&&Cy-i>0&&p[Cx-i][Cy-i]==Now)y++;else break;//向左上检查

if(y>=5)return Now;//若果达到5个则判断当前走子玩家为赢家

for(i=1;i<5;i++)if(Cx+i<MAXIMUS&&Cy-i>0&&p[Cx+i][Cy-i]==Now)z++;else break;//向右上检查

for(i=1;i<5;i++)if(Cx-i>0&&Cy+i<MAXIMUS&&p[Cx-i][Cy+i]==Now)z++;else break;//向左下检查

if(z>=5)return Now;//若果达到5个则判断当前走子玩家为赢家

return 0;//若没有检查到五连珠,则返回0表示还没有玩家达成胜利

}

int RunGame()//进行整个对局,返回赢家信息(虽然有用上)

{

int input;//输入变量

int victor;//赢家信息

Initialize();//初始化对局

while(1){//开始无限回合的死循环,直到出现胜利跳出

Print();//打印棋盘

input=getch();//等待键盘按下一个字符

if(input==27)//如果是ESC则退出程序

{

exit(0);

}

else if(input==0x20)//如果是空格则开始走子

{

if(Put())//如果走子成功则判断胜负

{

victor=Check();

Now=3-Now;//轮换当前走子玩家

count++;

if(victor==1)//如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息

{

showText="黑方获得了胜利!";

Print();

if(getch()==0xE0)

{

getch();

}

return Now;

}

else if(victor==2)//如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息

{

showText="白方获得了胜利!";

Display();

if(getch()==0xE0)

{

getch();

}

return Now;

}else if(count==MAXIMUS*MAXIMUS)//如果回合数达到了棋盘总量,即棋盘充满,即为平局

{

showText="平局!";

Display();

if(getch()==0xE0)

{

getch();

}

return 0;

}

}

}

else if(input==0xE0)//如果按下的是方向键,会填充两次输入,第一次为0xE0表示按下的是控制键

{

input=getch();//获得第二次输入信息

switch(input)//判断方向键方向并移动光标位置

{

case 0x4B://

Cx--;

break;

case 0x48:

Cy--;

break;

case 0x4D:

Cx++;

break;

case 0x50:

Cy++;

break;

}

if(Cx<0)Cx=MAXIMUS-1;//如果光标位置越界则移动到对侧

if(Cy<0)Cy=MAXIMUS-1;

if(Cx>MAXIMUS-1)Cx=0;

if(Cy>MAXIMUS-1)Cy=0;

}

}

}

int main()//主函数

{

system("title 简易五子棋 ——Etsnarl制作");//设置标题

system("mode con cols=63 lines=32");//设置窗口大小

system("color E0");//设置颜色

while(1){//循环执行游戏

RunGame();

}

}

关于“用VC++编写一个五子棋小游戏”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

(0)
上一篇 2024年05月15日
下一篇 2024年05月15日

相关推荐