#include <windows.h>
#include <stack>
#include <Cstdlib>
#include "resource.h"
#include "tekken.h"
using std::stack;
HINSTANCE hInst;
HWND hWnd;
HBITMAP chessimage[3];
HBITMAP chessboardimage;
HBITMAP background,none;
HBITMAP nothing;
HBITMAP keyboard_cursor;
HBITMAP cursor_back;
HDC chessboard;
HDC chess;
HDC chess_back;
HDC imageDC;
HDC hdc;
int ChessBoardSetting[15][15];
int player = player_black;
static int player_remain = player_black;
stack<int> regret;
unsigned long now,pass;
LPCTSTR MyName = "Tekken";
/***********************************************************\
主函数
\***********************************************************/
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
now = GetTickCount();
if ( (now - pass) > 100 )
MyPaint();
}
return msg.wParam;
}
/***********************************************************\
注册窗口
\***********************************************************/
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_SAVEBITS;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MyName);;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(GRAY_BRUSH);
wcex.lpszMenuName = MyName;
wcex.lpszClassName = MyName;
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
}
/***********************************************************\
创建、显示窗口和图像
\***********************************************************/
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance;
hWnd = CreateWindow(MyName, "Tekken's五子棋" ,
WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
SetChessBoard();
MoveWindow(hWnd,200,10,BACKGROUND_W,BACKGROUND_H + 53,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hdc = GetDC(hWnd);
chessboard = CreateCompatibleDC(hdc);
chessimage[chess_black] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BLACK));
chessimage[chess_white] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_WHITE));
chessboardimage = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_CHESSBOARD));
nothing = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_NOTHINGS));
keyboard_cursor = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_CURSOR));
cursor_back = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_CURSOR_BACK));
if(!chessimage[chess_black] || !chessimage[chess_white] || !chessboardimage || !nothing)
{
MessageBox(hWnd,"找不要需要的图片,游戏将退出.","错误提示",MB_ICONERROR);
ExitProcess(0);
}
hdc=GetDC(hWnd);
SetTextColor(hdc,RGB(0,0,0));
TextOut(hdc,600,70,"黑方先下棋",strlen("黑方先下棋"));
chess = CreateCompatibleDC(hdc);
chessboard = CreateCompatibleDC(hdc);
imageDC = CreateCompatibleDC(hdc);
chess_back = CreateCompatibleDC(hdc);
background = CreateCompatibleBitmap(hdc,BACKGROUND_W,BACKGROUND_H);
SelectObject(imageDC,background);
MyPaint();
return TRUE;
}
/***********************************************************\
绘制棋盘和棋子
\***********************************************************/
void MyPaint()
{
SelectObject(imageDC,none);
SelectObject(chess_back,nothing);
SelectObject(chessboard,chessboardimage);
BitBlt(imageDC,
0,0,BACKGROUND_W,BACKGROUND_H,
chessboard,0,0,SRCCOPY);
for(int i=0; i<length; i++)
{
for(int j=0; j<height; j++)
{
if (ChessBoardSetting[i][j] != 0)
{
SelectObject(chess,chessimage[ChessBoardSetting[i][j]]);
BitBlt(imageDC,
CHESS_WIDTH*j+WIDTH_ODDS,CHESS_HEINGT*i+HEINGT_ODDS,CHESS_WIDTH,CHESS_HEINGT,
chess_back,0,0,SRCAND);
BitBlt(imageDC,
CHESS_WIDTH*j+WIDTH_ODDS,CHESS_HEINGT*i+HEINGT_ODDS,CHESS_WIDTH,CHESS_HEINGT,
chess,0,0,SRCPAINT);
}
}
}
SelectObject(chess_back,cursor_back);
BitBlt(imageDC,
CHESS_WIDTH*key_cursor_x+WIDTH_ODDS,CHESS_HEINGT*key_cursor_y+HEINGT_ODDS,CHESS_WIDTH,CHESS_HEINGT,
chess_back,0,0,SRCAND);
SelectObject(chess_back,keyboard_cursor);
BitBlt(imageDC,
CHESS_WIDTH*key_cursor_x+WIDTH_ODDS,CHESS_HEINGT*key_cursor_y+HEINGT_ODDS,CHESS_WIDTH,CHESS_HEINGT,
chess_back,0,0,SRCPAINT);
BitBlt(hdc,
0,0,BACKGROUND_W,BACKGROUND_H,
imageDC,0,0,SRCCOPY);
pass=GetTickCount();
Text_show();
}
/***********************************************************\
主要回凋函数
\***********************************************************/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hBtn = NULL;
static long x_screen,y_screen;
HMENU hMenu = GetMenu(hWnd);
HMENU hSubMenu = GetSubMenu(hMenu,0);
int x_chess = 0,y_chess = 0;
int CursorPos =0,x_cur = 0,y_cur = 0;
switch (message)
{
case WM_MOUSEMOVE:
x_screen = LOWORD(lParam);
y_screen = HIWORD(lParam);
break;
//************鼠标左键响应**************//
case WM_LBUTTONDOWN:
x_chess = (x_screen - WIDTH_ODDS ) / CHESS_WIDTH;
y_chess = (y_screen - HEINGT_ODDS ) / CHESS_HEINGT;
if ( (x_screen > WIDTH_ODDS && y_screen > HEINGT_ODDS)
&& (x_chess >=0 && x_chess < length)
&& (y_chess >=0 && y_chess < height)
&& ChessBoardSetting[y_chess][x_chess] == 0
&& player != player_null)
{
PuttingChess(x_chess,y_chess);
}
break;
//************鼠标右键菜单**************//
case WM_RBUTTONUP:
HMENU hMenu;
hMenu = GetMenu(hWnd);
POINT curPoint;
GetCursorPos(&curPoint);
HMENU menuPopup;
menuPopup = CreatePopupMenu();
AppendMenu(menuPopup, MF_POPUP, IDM_REGRET, "悔棋[&R]" );
AppendMenu(menuPopup, MF_POPUP, IDM_RESET, "重新开始[&P]" );
AppendMenu(menuPopup, MF_POPUP, IDM_VS_PLAYER, "人人对战[&T]" );
AppendMenu(menuPopup, MF_POPUP, IDM_VS_AI, "人机对战[&P]" );
AppendMenu(menuPopup, MF_POPUP, IDM_AI_ADVICE, "AI提示[&A]" );
AppendMenu(menuPopup, MF_POPUP, IDM_QUIT, "退出游戏[&Q]" );
TrackPopupMenuEx(menuPopup,TPM_LEFTALIGN | TPM_TOPALIGN,
curPoint.x,curPoint.y,hWnd,NULL);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
//**********重新开始游戏的菜单功能实现***********//
case IDM_RESET:
SetChessBoard();
while (!regret.empty())
regret.pop();
player = player_black;
if ( AI_player != player_null)
AI_player = player_white;
SetTextColor(hdc,RGB(0,0,0));
TextOut(hdc,600,70,"轮到黑方下棋",strlen("轮到黑方下棋"));
if ( player == player_white )
ChangePlayer();
MyPaint();
break;
//*************悔棋的菜单功能实现**************//
case IDM_REGRET:
if (!regret.empty())
{
if (player == player_null)
player = player_remain;
ChessBoardSetting[regret.top() / 100][regret.top() % 100] = 0;
regret.pop();
if (!regret.empty() && AI_player != player_null )
{
ChessBoardSetting[regret.top() / 100][regret.top() % 100] = 0;
regret.pop();
}
if ( AI_player == player_null )
ChangePlayer();
}
else
MessageBox(hWnd,"还没有放入棋子!","悔棋",MB_OK);
MyPaint();
break;
//**********与人脑对战的菜单功能实现***********//
case IDM_VS_PLAYER:
CheckMenuItem(hMenu,0,MF_BYPOSITION | MF_CHECKED);
AI_player = player_null;
break;
//**********与电脑对战的菜单功能实现***********//
case IDM_VS_AI:
if (player == player_black
五子棋WINDOWS带AI版
4星 · 超过85%的资源 需积分: 35 193 浏览量
2008-10-06
21:26:04
上传
评论
收藏 2.79MB RAR 举报
rioukinnei1
- 粉丝: 0
- 资源: 4
最新资源
- 什么是后端开发-关于后端开发的一些小介绍分享
- Jurassic Pack Vol. II Dinosaurs 侏罗纪包卷恐龙二号Unity游戏模型资源unitypackage
- Jurassic Pack Vol. III Dinosaurs 侏罗纪包卷恐龙三号Unity游戏模型资源unitypackag
- Ultimate Seating Controller 终极座椅控制器Unity游戏开发插件资源unitypackage
- 什么是人工智能-关于人工智能的相关介绍说明
- Figma Converter for Unity适用Unity的Figma转换器Unity游戏开发插件unitypackage
- Creepy Animatronic Anims 令人毛骨悚然的电子动画Unity游戏动画插件资源unitypackage
- Rankings & Leaderboards 排名和排行榜Unity游戏开发插件资源unitypackage
- Semantic Color Palette 语义调色板Unity游戏开发插件资源unitypackage
- Low Poly Nature:Lush and Diverse Environments低聚自然郁郁Unity低多边形模型资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈