Windows编程 简易五子棋

news/2024/10/17 20:19:08/

简易五子棋,望指正

#include <windows.h>
#include<commctrl.h>
#define SIZE 20
UINT IDC_BUTTON1=200;
HWND hwnd; 
HPEN penback=CreatePen(PS_SOLID,1,RGB(0,0,0));
HPEN penback2=CreatePen(PS_SOLID,1,RGB(255,255,255));
HBRUSH brushback=CreateSolidBrush(RGB(255,255,255));
HBRUSH chessblack=CreateSolidBrush(RGB(0,0,0));
HBRUSH chesswhite=CreateSolidBrush(RGB(255,255,255));
int map[SIZE-1][SIZE-1]={0}; 
const int white=2;
const int black=1;
int sum=1;HDC hdc;
POINT pt={0,0};
int i=0;
void printbackground()
{hdc=GetDC(hwnd);SelectObject(hdc,brushback);  SelectObject(hdc,penback2);Rectangle(hdc,0,0,390,390);  SelectObject(hdc,penback);            	for(int i=0;i<SIZE;i++)for(int j=0;j<SIZE;j++)Rectangle(hdc,j*15+7,i*15+7,(j+1)*15+7,(i+1)*15+7);     //棋子放在方格点上 //Rectangle(hdc,j*15,i*15,(j+1)*15,(i+1)*15);//棋子放在方格内 }int whitewin()   //判断白棋是否赢 
{for(int i=0;i<SIZE;i++)for(int j=0;j<SIZE;j++)if(map[i][j]==white){for(int dx=-1;dx<=1;dx++)for(int dy=-1;dy<=1;dy++)if(dx!=0||dy!=0){ sum=1;                                                                                for(int m=1;m<=4;m++){int x=i+dx*m;int y=j+dy*m;if(x<0||x>=SIZE||y<0||y>=SIZE||map[x][y]!=white) break;else sum++;		}if(sum==5) return 1;}}return 0;      
}int blackwin()    //判断黑棋是否赢 
{for(int i=0;i<SIZE;i++)for(int j=0;j<SIZE;j++)if(map[i][j]==black){for(int dx=-1;dx<=1;dx++)for(int dy=-1;dy<=1;dy++)if(dx!=0||dy!=0){  sum=1;for(int m=1;m<=9;m++){int x=i+dx*m;int y=j+dy*m;if(x<0||x>=SIZE||y<0||y>=SIZE||map[x][y]!=black) break;else sum++;		}if(sum==5) return 1;}}return 0;      
}LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {switch(Message) {case WM_DESTROY: {PostQuitMessage(0);break;}case WM_LBUTTONDOWN:{GetCursorPos(&pt);ScreenToClient(hwnd,&pt);hdc=GetDC(hwnd);if(i==0){SelectObject(hdc,chessblack);i=1;map[pt.y/15][pt.x/15]=black;}else {SelectObject(hdc,chesswhite);i=0;map[pt.y/15][pt.x/15]=white;} if(pt.y/15<=SIZE&&pt.x/15<=SIZE) Ellipse(hdc,pt.x/15*15,pt.y/15*15,pt.x/15*15+15,pt.y/15*15+15);if(blackwin()) {MessageBox(hwnd,"黑棋赢","游戏结束",MB_OKCANCEL);printbackground();memset(map,0,sizeof(map));i=0;}if(whitewin()) {MessageBox(hwnd,"白棋赢","游戏结束",MB_OKCANCEL);printbackground();memset(map,0,sizeof(map));i=0;}//searchblack(0,0,0);//searchwhite(0,0,0);//第pt.y/15行,pt.x/15列有棋子 break;}default:return DefWindowProc(hwnd, Message, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {WNDCLASSEX wc;MSG msg; memset(&wc,0,sizeof(wc));wc.cbSize		 = sizeof(WNDCLASSEX);wc.lpfnWndProc	 = WndProc; wc.hInstance	 = hInstance;wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wc.lpszClassName = "WindowClass";wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) {MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);return 0;}hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, /* x */CW_USEDEFAULT, /* y */390, /* width */390, /* height */NULL,NULL,hInstance,NULL);if(hwnd == NULL) {MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);return 0;}printbackground();while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); }return msg.wParam;
}

http://www.ppmy.cn/news/563048.html

相关文章

课程设计-单机版五子棋游戏-Java

一. 项目简介&#xff1a; 五子棋是全国智力运动会竞技项目之一&#xff0c;是一种两人对弈的纯策略型棋类游戏。五子棋的玩法是&#xff1a;双方分别使用黑白两色的棋子&#xff0c;下在棋盘直线与横线的交叉点上&#xff0c;先形成五子连线者获胜。五子棋的棋具与围棋通用…

五子棋人机对弈代码——java版

算法是穷举递归法&#xff0c;只不过用java重新写了一遍 import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.Mou…

c++五子棋人机版

五子棋游戏人机版&#xff1a; 电脑实现了阻挡对方连续的棋子 #include<iostream> #include<iomanip> using namespace std; #include<stdlib.h> #include<time.h> /*class PerPlayer { public:int m;int n;int person(); }; PerPlayer pp;class CompP…

五子棋程序设计实现技术文档

五子棋程序设计实现文档 文章目录 五子棋程序设计实现文档前言一、运行截图二、基本思路1.实现过程2.落子3.悔棋4.人机对战的实现1.机器人落子逻辑**2.改进胜负判断方法3.计算目标点的权值(白棋ai使用)4.计算目标点的权值(黑棋ai使用)** 4.扩展功能1.智能“提示”功能 前言 博…

Windows平台下C++五子棋项目实战开发

1. 项目目标 2. 效果演示 3. 创建项目 4. 项目框架设计 4.1 设计项目框架 4.2 根据设计框架创建类 5. 给类添加主要接口 5.1 设计棋盘类Chess的主要接口 5.2 设计AI类的主要接口 5.3 设计Man类的主要接口 5.4 设计ChessGame的主要接口 5.5 添加各个接口的具体实现 6. 实…

基于java的五子棋游戏设计

技术&#xff1a;Java、JSP等摘要&#xff1a;随着互联网迅速的发展&#xff0c;网络游戏已经成为人们普遍生活中不可或缺的一部分&#xff0c;它不仅能使人娱乐&#xff0c;也能够开发人的智力&#xff0c;就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程…

用Java实现五子棋对弈

目录 题目展示 题目分析 代码实现 结果展示 题目展示 1.使用二维数组存储五子棋棋盘 如下图 2.在控制台通过Scanner输入黑白棋坐标( 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子。 如下图: 输入后重新输出棋盘如下图: 白棋输入后如下图&#xff1a; 黑白棋…

C++实现基于博弈树的5x5一子棋人机对战

基于博弈树的5x5一子棋人机对战 919106840637实验2 这是智能计算三个课程实验的第二个实验&#xff0c;即博弈树搜索 。我之前对博弈树的了解不多&#xff0c;所以实现起来比较的简略&#xff0c;仅仅是基本达到了要求 实验语言 C 实验内容 实践博弈树搜索——“5x5格子的一…