日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++五子棋(二)——游戏界面与棋子渲染

發布時間:2025/3/21 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++五子棋(二)——游戏界面与棋子渲染 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備

我們首先要在程序中定義一個名為drawPNG的函數,用于輸出png格式圖片并使背景透明

  • 引入頭文件(需要提前安裝EasyX)
#include <graphics.h>
  • 定義函數 drawPNG
void drawPNG(IMAGE* picture, int picture_x, int picture_y) //x為載入圖片的X坐標,y為Y坐標 {// 變量初始化DWORD* dst = GetImageBuffer(); // GetImageBuffer()函數,用于獲取繪圖設備的顯存指針,EASYX自帶DWORD* draw = GetImageBuffer();DWORD* src = GetImageBuffer(picture); //獲取picture的顯存指針int picture_width = picture->getwidth(); //獲取picture的寬度,EASYX自帶int picture_height = picture->getheight(); //獲取picture的高度,EASYX自帶int graphWidth = getwidth(); //獲取繪圖區的寬度,EASYX自帶int graphHeight = getheight(); //獲取繪圖區的高度,EASYX自帶int dstX = 0; //在顯存里像素的角標// 實現透明貼圖 公式: Cp=αp*FP+(1-αp)*BP , 貝葉斯定理來進行點顏色的概率計算for (int iy = 0; iy < picture_height; iy++){for (int ix = 0; ix < picture_width; ix++){int srcX = ix + iy * picture_width; //在顯存里像素的角標int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度int sr = ((src[srcX] & 0xff0000) >> 16); //獲取RGB里的Rint sg = ((src[srcX] & 0xff00) >> 8); //Gint sb = src[srcX] & 0xff; //Bif (ix >= 0 && ix <= graphWidth && iy >= 0 && iy <= graphHeight && dstX <= graphWidth * graphHeight){dstX = (ix + picture_x) + (iy + picture_y) * graphWidth; //在顯存里像素的角標int dr = ((dst[dstX] & 0xff0000) >> 16);int dg = ((dst[dstX] & 0xff00) >> 8);int db = dst[dstX] & 0xff;draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16) //公式: Cp=αp*FP+(1-αp)*BP ; αp=sa/255 , FP=sr , BP=dr| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8) //αp=sa/255 , FP=sg , BP=dg| (sb * sa / 255 + db * (255 - sa) / 255); //αp=sa/255 , FP=sb , BP=db}}} }

初始化游戲

創建游戲界面

素材大小

  • 通過查看res素材文件夾下的棋盤2.jpg可知,圖片大小為897*895
  • 通過圖片大小計算可得一個格子的大小為67.4
  • 先記下這些參數,后面對我們開發特別重要

創建窗口

  • 首先,定義 float類型常量 BLOCKSIZE,即格子大小
const float BLOCKSIZE = 67.4;
  • 然后定義 init() 如下
void init(){initgraph(897,895); //創建897*895大小的窗口,與棋盤2.jpg大小對應loadimage(0,"res/棋盤2.jpg"); //加載圖片到窗口 }

加載音樂

  • 引入播放音樂的 頭文件 mmsystem.h
#include <mmsystem.h>
  • 加載庫 winmm.lib
#pragma comment(lib,"winmm.lib");
  • 繼續在 init() 函數中添加播放 提示語音(res/start.wav) 的語句(注意添加位置)
mciSendString("play res/start.wav",0,0,0); //提示下棋語音

棋子渲染

加載素材

  • 定義 IMAGE 類型的全局變量 chessWhitechessBlack
IMAGE chessWhite; //黑棋子變量 IMAGE chessBlack; //白棋子變量
  • init() 函數定義中添加加載圖片語句如下(將black.png白棋子素材white.png黑棋子素材加載到變量)
//長和寬都是BLOCKSIZE,最后一個true參數表示原比例縮放防止圖片被截斷 loadimage(&chessBlack, "res/black.png",BLOCKSIZE,BLOCKSIZE,true); loadimage(&chessWhite, "res/white.png", BLOCKSIZE, BLOCKSIZE, true);

實現渲染

  • 定義棋子種類
typedef enum{CHESS_WHITE = -1,CHESS_BLACK = 1 } chess_kind_t;
  • 在實現輸出棋子之前我們需要來看幾個數據

  • MARGIN_X為上邊界大小,MARGIN_Y為左邊界大小,因此我們定義同名全局常量
const int MARGIN_X = 44; const int MARGIN_Y = 43;const int BOARD_GRAD_SIZE = 13; //13*13棋盤大小
  • 之后定義函數 chessDown() 用于打印棋子圖片
void chessDown(int row, int col, chess_kind_t kind){mciSendString("play res/down7.wav",0,0,0); //播放下棋音樂//EasyX是以窗口左上角為坐標原點//定義棋子x橫坐標int x = MARGIN_X + col * BLOCKSIZE - 0.5 * BLOCKSIZE;//定義棋子y縱坐標int y = MARGIN_Y + row * BLOCKSIZE - 0.5 * BLOCKSIZE;//判斷棋子種類并打印if(kind == CHESS_WHITE){drawPNG(&chessWhite,x,y);}else{drawPNG(&chessBlack,x,y);}}

結束

到了這里,我們已經實現了游戲界面的初始化和棋子渲染了,接下來我們就要實現獲取鼠標信息來判斷有效點擊

總結

以上是生活随笔為你收集整理的C++五子棋(二)——游戏界面与棋子渲染的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜视频色 | a级片视频网站 | 香蕉网在线视频 | 无码人妻精品一区二区三区99v | 日韩极品视频 | 日本性久久 | 久久精品黄aa片一区二区三区 | 激情午夜av | 韩国成人在线视频 | 91亚洲精品久久久久久久久久久久 | 一区二区三区中文字幕在线观看 | 九色91蝌蚪 | 天堂亚洲精品 | 午夜影院在线 | 四虎新网站 | 人人狠狠| 成人免费在线播放 | 手机福利视频 | jzzjzz日本丰满少妇 | 稀缺小u女呦精品呦 | 亚洲日本视频在线观看 | 96毛片| 91精品国产91久久久久久黑人 | 一级黄色毛毛片 | 日日摸天天爽天天爽视频 | 久久久精彩视频 | 伊人伦理 | 久久国产精品-国产精品 | 98国产视频 | 男人日女人在线观看 | 国产午夜成人久久无码一区二区 | 久久97精品 | 亚洲熟女少妇一区二区 | 手机成人av在线 | 亚洲hh| 日韩精品短片 | 一区二区亚洲精品 | 一区二区91 | 国产精品呻吟久久 | 日韩在线一二 | 日韩久久在线 | 久久婷婷亚洲 | 午夜影院免费 | 国产午夜网站 | 亚洲女人初尝黑人巨大 | av天堂一区| 欧美亚洲视频 | 国产精品永久在线 | 少妇免费看 | 激情文学88 | 超碰66| 日本护士╳╳╳hd少妇 | 无码人妻少妇伦在线电影 | 狠狠爱夜夜操 | 亚洲第一色站 | 激情小说在线观看 | 日本激情视频在线 | 视频国产精品 | 欧美性生话 | 国产精品欧美在线 | 尤物影院在线观看 | 男女天堂av | 超碰人人射 | 成人免费黄色小视频 | www.成人在线视频 | 久久久久久久久久综合 | 国产麻豆精品在线 | 超薄肉色丝袜一区二区 | 色图综合网 | 竹菊影视日韩一区二区 | 狠狠艹 | 精品久久电影 | 老司机深夜福利在线观看 | 国产av一区精品 | 亚洲美女视频在线观看 | 天天色天天干天天色 | 日韩亚洲天堂 | а天堂中文在线官网 | 欧美专区亚洲专区 | 国产成人午夜精品无码区久久 | 暴力调教一区二区三区 | www.午夜视频| 天堂网亚洲 | 久久草精品 | 青青草97国产精品免费观看 | 国产清纯白嫩初高中在线观看性色 | 欧美极品在线视频 | 他揉捏她两乳不停呻吟动态图 | 国产最新av | 黑人一级女人全片 | 亚洲国产中文在线 | 国产欧美久久一区二区三区 | 女厕厕露p撒尿八个少妇 | 免费在线观看网址入口 | 精品毛片一区二区三区 | 国产aaaaaaa | 日韩中文字幕在线观看 | av网站不卡| 国产一区二区三区视频播放 |