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

歡迎訪問 生活随笔!

生活随笔

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

php

php消消乐代码,C/C++百行代码实现热门游戏消消乐功能的示例代码

發布時間:2024/1/1 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php消消乐代码,C/C++百行代码实现热门游戏消消乐功能的示例代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

游戲設計

首先我們需要使用第三方框架,這里我使用的是sfml,不會使用sfml在我的上幾篇文章當中-掃雷(上)有詳細的開發環境搭建介紹

首先準備圖片資源

一張背景圖片,一張寶石圖片

窗口初始化加載圖片

Texture t1;

t1.loadFromFile(“images/bg2.png”);

當鼠標第一次單擊時,記錄下位置,第二次單擊又記錄一下位置,如果兩個小方塊相鄰就交換位置,如果不相鄰如圖c的位置則,不發生變化

判斷行或列如果三張一樣的圖片相鄰,清除一下圖片,進行刷新

實列

#include

#include

#include

using namespace sf;

#define GAME_ROWS_COUNT 8

#define GAME_COLS_COUNT 8

int ts = 57; // 每一個游戲小方塊區域的大小

bool isMoving = false;

bool isSwap = false;

// 相鄰位置的第幾次單擊,第2次單擊才交換方塊

int click = 0;

Vector2i pos; //鼠標單擊時的位置

Vector2i offset(15, 273);

int posX1, posY1; //第一次單擊的位置(記錄行和列的序號)

int posX2, posY2; //第二次單擊的位置(記錄行和列的序號)

struct Block {

int x, y; //坐標值 x == col * ts y == row * ts;

int row, col; //第幾行,第幾列

int kind; //表示第幾種小方塊

bool match; //表示是否成三

int alpha; //透明度

Block() {

match = false;

alpha = 255;

kind = -1;

}

} grid[GAME_ROWS_COUNT + 2][GAME_ROWS_COUNT + 2];

void swap(Block p1, Block p2) {

std::swap(p1.col, p2.col);

std::swap(p1.row, p2.row);

grid[p1.row][p1.col] = p1;

grid[p2.row][p2.col] = p2;

}

void doEvent(RenderWindow* window) {

Event e;

while (window->pollEvent(e)) {

if (e.type == Event::Closed) {

window->close();

}

if (e.type == Event::MouseButtonPressed) {

if (e.key.code == Mouse::Left) {

if (!isSwap && !isMoving) click++;

pos = Mouse::getPosition(*window) - offset;

}

}

}

if (click == 1) {

posX1 = pos.x / ts + 1;

posY1 = pos.y / ts + 1;

}

else if (click == 2) {

posX2 = pos.x / ts + 1;

posY2 = pos.y / ts + 1;

// 是相鄰方塊就交換位置

if (abs(posX2 - posX1) + abs(posY2 - posY1) == 1) {

// 交換相鄰的兩個小方塊

// 消消樂的方塊,怎么表示?

swap(grid[posY1][posX1], grid[posY2][posX2]);

isSwap = 1;

click = 0;

}

else {

click = 1;

}

}

}

void check() {

for (int i = 1; i <= GAME_ROWS_COUNT; i++) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

if (grid[i][j].kind == grid[i + 1][j].kind &&

grid[i][j].kind == grid[i - 1][j].kind) {

//grid[i - 1][j].match++;

//grid[i][j].match++;

//grid[i + 1][j].match++;

for (int k = -1; k <= 1; k++) grid[i + k][j].match++;

}

if (grid[i][j].kind == grid[i][j - 1].kind &&

grid[i][j].kind == grid[i][j + 1].kind) {

//grid[i][j - 1].match++;

//grid[i][j + 1].match++;

//grid[i][j].match++;

for (int k = -1; k <= 1; k++) grid[i][j + k].match++;

}

}

}

}

void doMoving() {

isMoving = false;

for (int i = 1; i <= GAME_ROWS_COUNT; i++) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

Block& p = grid[i][j]; // 引用p, 就是grid[i][j]的別名

int dx, dy;

for (int k = 0; k < 4; k++) {

dx = p.x - p.col * ts;

dy = p.y - p.row * ts;

if (dx) p.x -= dx / abs(dx);

if (dy) p.y -= dy / abs(dy);

}

if (dx || dy) isMoving = true;

}

}

}

void xiaochu() {

for (int i = 1; i <= GAME_ROWS_COUNT; i++) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

if (grid[i][j].match && grid[i][j].alpha > 10) {

grid[i][j].alpha -= 10;

isMoving = true;

}

}

}

}

void huanYuan() {

if (isSwap && !isMoving) {

// 如果此時沒有產生匹配效果,就要還原

int score = 0;

for (int i = 1; i <= GAME_ROWS_COUNT; i++) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

score += grid[i][j].match;

}

}

if (score == 0) {

swap(grid[posY1][posX1], grid[posY2][posX2]);

}

isSwap = false;

}

}

void updateGrid() {

for (int i = GAME_ROWS_COUNT; i > 0; i--) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

if (grid[i][j].match) {

for (int k = i - 1; k > 0; k--) {

if (grid[k][j].match == 0) {

swap(grid[k][j], grid[i][j]);

break;

}

}

}

}

}

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

int n = 0;

for (int i = GAME_ROWS_COUNT; i > 0; i--) {

if (grid[i][j].match) {

grid[i][j].kind = rand() % 7;

grid[i][j].y = -ts * n;

n++;

grid[i][j].match = false;

grid[i][j].alpha = 255;

}

}

}

}

void drawBlocks(Sprite* sprite, RenderWindow* window) {

for (int i = 1; i <= GAME_ROWS_COUNT; i++) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

Block p = grid[i][j];

sprite->setTextureRect(

IntRect(p.kind * 52, 0, 52, 52));

// 設置透明度

sprite->setColor(Color(255, 255, 255, p.alpha));

sprite->setPosition(p.x, p.y);

// 因為數組gird中的Block, 每個Block的行標,列標是從1計算的,

// 并根據行標和列表來計算的x,y坐標

// 所以坐標的偏移,需要少便宜一些,也就是相當于在正方形區域的左上角的左上角方向偏移一個單位

// 在這個位置開發存放第0行第0列(實際不繪制第0行第0列)

sprite->move(offset.x - ts, offset.y - ts); // to do

window->draw(*sprite);

}

}

}

void initGrid() {

for (int i = 1; i <= GAME_ROWS_COUNT; i++) {

for (int j = 1; j <= GAME_COLS_COUNT; j++) {

grid[i][j].kind = rand() % 3;

grid[i][j].col = j;

grid[i][j].row = i;

grid[i][j].x = j * ts;

grid[i][j].y = i * ts;

}

}

}

int main(void) {

srand(time(0));

RenderWindow window(VideoMode(485, 917), "canxin-xiaoxiaole");

// 設置刷新的最大幀率

window.setFramerateLimit(60);

Texture t1, t2;

t1.loadFromFile("images/bg2.png");

if (!t2.loadFromFile("images/1.png")) {

return -1;

}

Sprite spriteBg(t1);

Sprite spriteBlock(t2);

initGrid();

while (window.isOpen()) {

// 處理用戶的點擊事件

doEvent(&window);

// 檢查匹配情況

check();

// 移動處理

doMoving();

// 消除

if (!isMoving) {

xiaochu();

}

// 還原處理

huanYuan();

if (!isMoving) {

updateGrid();

}

// 渲染游戲畫面

window.draw(spriteBg);

// 渲染所有的小方塊

drawBlocks(&spriteBlock, &window);

// 顯示

window.display();

}

return 0;

}

總結

到此這篇關于C/C++百行代碼實現熱門游戲消消樂功能的示例代碼的文章就介紹到這了,更多相關C++ 消消樂內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

總結

以上是生活随笔為你收集整理的php消消乐代码,C/C++百行代码实现热门游戏消消乐功能的示例代码的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品成人av一区二区三区 | 韩国av永久免费 | 国产一二三四在线 | www,五月天,com | 中国女人黄色大片 | 69av一区二区三区 | 激情av一区 | 亚洲天堂日韩av | 欧美黄色a | 在线观看国产黄 | 美女色av | 亚洲作爱 | 九一在线观看免费高清视频 | 国产aⅴ | 中文字幕一区二区三区av | 黄色av网页 | 性久久久| 久草免费av| av网站大全在线 | 怡红院成永久免费人全部视频 | 国产色影院 | 欧美日国产| 欧美精品日韩在线 | 日韩高清精品免费观看 | 午夜精品无码一区二区三区 | 看片网址国产福利av中文字幕 | 天天射日日 | 2022av视频| 羞羞涩涩网站 | 娇小tube性极品娇小 | 特级免费毛片 | 国产日韩一区二区三区 | 在线黄网站 | 精品国产乱码久久久久久鸭王1 | 国产老头老太作爱视频 | 精品少妇3p | 国产福利电影在线 | www.青青草.com | av毛片基地 | 国产特黄毛片 | 欧美粗大猛烈老熟妇 | 亚洲av无一区二区三区怡春院 | 在线观看欧美一区二区 | 九一精品在线 | 久久精品黄色片 | 欧美永久 | 娇小6一8小毛片 | 美脚の诱脚舐め脚视频播放 | 屁屁影院国产第一页 | 欧美日本高清视频 | 色妞视频 | 精品国产一区二区三区四区 | 国产人伦精品一区二区三区 | 偷偷操不一样的久久 | 亚洲成人精品网 | 国产精品第157页 | 天天视频天天爽 | 少妇太紧太爽又黄又硬又爽小说 | 亚洲国产成人精品女人 | 久久人久久 | 富婆如狼似虎找黑人老外 | 污视频在线观看免费 | 国产免费观看久久黄av片 | 黄色不打码视频 | 国产又粗又猛又黄又爽 | 日韩免费电影一区 | a点w片 | 天天摸天天碰 | 五月婷婷狠狠爱 | 黄片毛片视频 | 韩国成人免费视频 | 黄色av一区二区三区 | 夜夜夜网站 | 中文字幕日韩欧美一区二区三区 | 国内外成人在线视频 | 久操福利 | 国产在线播放av | 欧美 日韩 视频 | 潘金莲裸体一级淫片视频 | 人人妻人人澡人人爽精品日本 | 精品伦理一区二区 | 亚洲一本之道 | 美女被出白浆 | 国产区网址 | 三级全黄做爰龚玥菲在线 | 久久久久一区二区三区四区 | 在线观看视频毛片 | 久久av影院 | 男人草女人| 强行无套内谢大学生初次 | 国产男男网站 | 97国产成人无码精品久久久 | 3d动漫精品啪啪一区二区三区免费 | 亚洲奶汁xxxx哺乳期 | 欧美freesex黑人又粗又大 | 巨胸爆乳美女露双奶头挤奶 | 国产日韩91 | julia一区二区三区中文字幕 | 老子午夜影院 |