我正在写一个斗地主程序
现在想实现点牌上移,但是每次点牌时候只是瞬间上移,松开鼠标之后牌还是回原位
下面是部分代码(所有代码都在main.cpp的一个大循环中)
//gamingView.cpp
bool isClick[20] = { false };
int clicked[20]; // 点击了哪张牌
int clicked_count = 0; // 当前处于点击状态的牌的数量
void moveImg(dealCards a, int x, int clicked[], int& clicked_count) {
if (!isClick[x]) {
cardPos[x][1] -= 40;
isClick[x] = true;
clicked[clicked_count++] = x;
}
else
{
cardPos[x][1] += 40;
isClick[x] = false;
// 把当前牌从 clicked 数组中移除
for (int i = 0; i < clicked_count; i++) {
if (clicked[i] == x) {
clicked[i] = clicked[clicked_count - 1];
clicked_count--;
break;
}
}
}
for (int t = 0; t < 17; t++) {
int j = a.player1[t].order;
// 更新已经被点击过的牌的位置
bool updated = false;
for (int i = 0; i < clicked_count; i++) {
if (clicked[i] == t) {
putimage(cardPos[t][0], cardPos[t][1], &t_cards[j]);
updated = true;
break;
}
}
if (!updated) {
putimage(cardPos[t][0], cardPos[t][1], &t_cards[j]);
}
}
}
void gameingView::render() {
if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
curView = new menuView;
}
//发牌
static dealCards a;
putimage(0, 0, &img_bg[1]);
if (!this->isRandom) {
a.Initalize();
a.send();
this->isRandom = true;
}
a.show();
//点牌上移
ExMessage msg = getmessage(EX_MOUSE);
//拆出来的按钮
for (int i = 0; i < 20; i++)
{
if (msg.x >= cardPos[i][0] && msg.x <= cardPos[i][0] + 50 &&
msg.y >= cardPos[i][1] && msg.y <= cardPos[i][1] + cards[0].getheight()) {
switch (msg.message) {
case WM_LBUTTONDOWN://鼠标按键动作
moveImg(a, i, clicked, clicked_count);
break;
}
}
}
return;
}
//dealCard.cpp
void dealCards::show() {
for (int i = 0; i < 17; i++) {
int j = player1[i].order;
int x = 178, y = 494;
cardPos[i][0] = x + 50 * i;//图片左上角x
cardPos[i][1] = y; //图片左上角y
transparentimage(NULL, cardPos[i][0], cardPos[i][1], &t_cards[j]);
//三张可能的地主牌初始为零
cardPos[17][0] = cardPos[18][1] = cardPos[18][0] =
cardPos[18][1] = cardPos[19][0] = cardPos[19][1] = 0;
}
//左右两个小牌代表两个bot的牌(不详细展示)
IMAGE t;
loadimage(&t, "img/card_bg.png", 68, 100);
putimage(194, 292, &t);
putimage(1019, 292, &t);
}
//dealCard.h
#pragma once
#include<iostream>
#include<string>
#include<easyx.h>
#include"img.h"
using namespace std;
#include"headInclude.h"
class dealCards
{
public:
enum color {
spade,
heart,
diamond,
club,
joker
};//黑桃,红桃,方块,梅花,王
struct poker
{
int num;//点数
color colors;//花色
int score;//分数(在斗地主中牌的大小,2最大3最小)
int order;//牌的顺序,从黑桃a(0)开始到大王(53)
};
void send();
void show();
void Initalize();
void rule(poker* card);
poker pokers[54];
poker player1[17];
poker player2[17];
poker player3[17];
poker landlord[3];
};
//图片左上角的x和y
extern int cardPos[20][2];
请尽量不要使用gpt