Files
youle_cocos/projects/doudizhu/js/Class_branch/09_hand_card.js
T
joywayerandClaude Opus 4.8 7ab748919a chore: 纳入项目全部源码进根仓库统一管理
删除 YouleNexus 内嵌 .git,统一由根仓库唯一管理。提交:
- projects/ 旧 H5 模板 Game_Surface_3 与各子游戏源码
- cocoscreator_projects/YouleNexus 工程 + cocos-creator-mcp 扩展源码
- CLAUDE.md、.mcp.json 等配置
library/temp/node_modules/dist 等缓存由 .gitignore 排除。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 11:55:13 +08:00

451 lines
19 KiB
JavaScript

var Hand_card = {};
Hand_card.sort = function(seat,hand_cards){
//手牌摆放
if (seat == Utl.getMySeat()) {
for (var i = 0;i < id_config.hc_len[Utl.getMySeat()]; i++) {
if (id_config.put_posi_y[0] == get_self(id_config.car_start[seat]+i,19,0,0,0)) {
set_self(id_config.car_start[0]+i,19,id_config.sta_posi_y[0],0,0);
}
set_self(id_config.car_start[0]+i,37,0,0,0);
}
}
if (id_config.car_position[Utl.changeToStatus(seat)] == 0) {//左边
Hand_card.sortleft(Utl.changeToStatus(seat),hand_cards);
}else if (id_config.car_position[Utl.changeToStatus(seat)] == 1) {// 中间
Hand_card.sortin(Utl.changeToStatus(seat),hand_cards);
}else if (id_config.car_position[Utl.changeToStatus(seat)] == 2) {//右边
Hand_card.sortright(Utl.changeToStatus(seat),hand_cards);
}
};
Hand_card.ani = function(type){
//显示手牌
//第一张牌的x坐标
if (Public_data.data.hand_cards.length%2) {//单数
var anix = id_config.sta_posi_x[0] - (id_config.car_intervalx[0] * ((Public_data.data.hand_cards.length-1)/2));
}else{//双数
var anix = id_config.sta_posi_x[0] - (id_config.car_intervalx[0] * (Public_data.data.hand_cards.length/2)) + id_config.car_intervalx[0]/2;
}
for (var i = 0;i < id_config.hc_len[Utl.getMySeat()]; i++) {
if (i < Public_data.data.hand_cards.length) {
set_self(id_config.car_start[0]+i,43,Public_data.data.hand_cards[i]%54+1,0,0);
}
set_self(id_config.car_start[0]+i,18,anix,0,0);
set_self(id_config.car_start[0]+i,37,0,0,0);
}
}
Hand_card.show = function(type){
//显示手牌
for (var i = 0;i < Public_data.data.hand_cards.length; i++) {
set_self(id_config.car_start[0]+i,37,type,0,0);
}
}
Hand_card.ini_y = function(type){
//手牌y重置
for (var i = 0; i < id_config.hc_len[Utl.getMySeat()]; i++) {
if (get_self(id_config.car_start[0]+i,37,0,0,0)) {
set_self(id_config.car_start[0]+i,19,id_config.sta_posi_y[0],0,0);
}
}
}
Hand_card.ini = function(){
//牌位置初始化
//第一张牌的x坐标
if (Public_data.data.hand_cards.length%2) {//单数
set_self(id_config.car_start[0],18,id_config.sta_posi_x[0] - (id_config.car_intervalx[0] * ((id_config.hc_len[Utl.getMySeat()]-1)/2)),0,0);
}else{//双数
set_self(id_config.car_start[0],18,id_config.sta_posi_x[0] - (id_config.car_intervalx[0] * (id_config.hc_len[Utl.getMySeat()]/2)) + id_config.car_intervalx[0]/2,0,0);
}
for (var i = 0;i < id_config.hc_len[Utl.getMySeat()]; i++) {
//sta_posi_x 初始x car_intervalx 间距
set_self(id_config.car_start[0]+i,18,get_self(id_config.car_start[0],18,0,0,0)+id_config.car_intervalx[0]*i,0,0);
set_self(id_config.car_start[0]+i,19,id_config.sta_posi_y[0],0,0);
set_self(id_config.car_start[0]+i,20,id_config.wide[0],0,0);
set_self(id_config.car_start[0]+i,21,id_config.high[0],0,0);
set_self(id_config.car_start[0]+i,37,0,0,0);
}
}
Hand_card.sortleft = function(seat,hand_cards){//左边排位子
for (var i = 0;i < hand_cards.length; i++) {
if (i>=id_config.car_len[seat]) {
//sta_posi_x 初始x car_intervalx 间距
set_self(id_config.car_start[seat]+i,18,id_config.sta_posi_x[seat]+id_config.car_intervalx[seat]*(i-id_config.car_len[seat]),0,0);
set_self(id_config.car_start[seat]+i,19,id_config.sta_posi_y[seat]+id_config.car_intervaly[seat],0,0);
set_self(id_config.car_start[seat]+i,20,id_config.wide[seat],0,0);
set_self(id_config.car_start[seat]+i,21,id_config.high[seat],0,0);
set_self(id_config.car_start[seat]+i,43,hand_cards[i]%54+1,0,0);
set_self(id_config.car_start[seat]+i,37,1,0,0);
}else{
//sta_posi_x 初始x car_intervalx 间距
set_self(id_config.car_start[seat]+i,18,id_config.sta_posi_x[seat]+id_config.car_intervalx[seat]*i,0,0);
set_self(id_config.car_start[seat]+i,19,id_config.sta_posi_y[seat],0,0);
set_self(id_config.car_start[seat]+i,20,id_config.wide[seat],0,0);
set_self(id_config.car_start[seat]+i,21,id_config.high[seat],0,0);
set_self(id_config.car_start[seat]+i,43,hand_cards[i]%54+1,0,0);
set_self(id_config.car_start[seat]+i,37,1,0,0);
}
}
};
Hand_card.sortright = function(seat,hand_cards){//右边排位子
//第一张牌的x坐标
if (hand_cards.length<=id_config.car_len[seat]) {
set_self(id_config.car_start[seat],18,id_config.sta_posi_x[seat] - (id_config.car_intervalx[seat] * (hand_cards.length-1)),0,0);
} else {
set_self(id_config.car_start[seat],18,id_config.sta_posi_x[seat] - (id_config.car_intervalx[seat] * 9),0,0);
}
for (var i = 0;i < hand_cards.length; i++) {
if (i>=id_config.car_len[seat]) {
var diyix = id_config.sta_posi_x[seat] - (id_config.car_intervalx[seat] * (hand_cards.length-11));
//sta_posi_x 初始x car_intervalx 间距
set_self(id_config.car_start[seat]+i,18,diyix+id_config.car_intervalx[seat]*(i-id_config.car_len[seat]),0,0);
set_self(id_config.car_start[seat]+i,19,id_config.sta_posi_y[seat]+id_config.car_intervaly[seat],0,0);
set_self(id_config.car_start[seat]+i,20,id_config.wide[seat],0,0);
set_self(id_config.car_start[seat]+i,21,id_config.high[seat],0,0);
set_self(id_config.car_start[seat]+i,43,hand_cards[i]%54+1,0,0);
set_self(id_config.car_start[seat]+i,37,1,0,0);
}else{
//sta_posi_x 初始x car_intervalx 间距
set_self(id_config.car_start[seat]+i,18,get_self(id_config.car_start[seat],18,0,0,0)+id_config.car_intervalx[seat]*i,0,0);
set_self(id_config.car_start[seat]+i,19,id_config.sta_posi_y[seat],0,0);
set_self(id_config.car_start[seat]+i,20,id_config.wide[seat],0,0);
set_self(id_config.car_start[seat]+i,21,id_config.high[seat],0,0);
set_self(id_config.car_start[seat]+i,43,hand_cards[i]%54+1,0,0);
set_self(id_config.car_start[seat]+i,37,1,0,0);
}
}
};
Hand_card.sortin = function(seat,hand_cards){//中间排位子
//第一张牌的x坐标
if (hand_cards.length%2) {//单数
set_self(id_config.car_start[seat],18,id_config.sta_posi_x[seat] - (id_config.car_intervalx[seat] * ((hand_cards.length-1)/2)),0,0);
}else{//双数
set_self(id_config.car_start[seat],18,id_config.sta_posi_x[seat] - (id_config.car_intervalx[seat] * (hand_cards.length/2)) + id_config.car_intervalx[seat]/2,0,0);
}
for (var i = 0;i < hand_cards.length; i++) {
//sta_posi_x 初始x car_intervalx 间距
set_self(id_config.car_start[seat]+i,18,get_self(id_config.car_start[seat],18,0,0,0)+id_config.car_intervalx[seat]*i,0,0);
set_self(id_config.car_start[seat]+i,19,id_config.sta_posi_y[seat],0,0);
set_self(id_config.car_start[seat]+i,20,id_config.wide[seat],0,0);
set_self(id_config.car_start[seat]+i,21,id_config.high[seat],0,0);
set_self(id_config.car_start[seat]+i,43,hand_cards[i]%54+1,0,0);
set_self(id_config.car_start[seat]+i,37,1,0,0);
}
};
var Putcards = {};
Putcards.sort = function(){//打牌排位子
//出牌摆放
for (var i = 0; i < Public_data.data.maxman ;i ++) {
if (Public_data.data.playerlist[0][i] == 1 || Public_data.data.playerlist[0][i] == 3) {
if (Public_data.data.dealid[i].length) {
if (id_config.car_position[Utl.changeToStatus(i)] == 0) {//左边
Putcards.sortleft(i);
}else if (id_config.car_position[Utl.changeToStatus(i)] == 1) {//中间
Putcards.sortin(i);
}else if (id_config.car_position[Utl.changeToStatus(i)] == 2) {//右边
Putcards.sortright(i);
}
set_self(id_config.pass_id + Utl.changeToStatus(i),37,0,0,0);
}
}else if (Public_data.data.playerlist[0][i] == 2) {
set_self(id_config.pass_id + Utl.changeToStatus(i),37,1,0,0);
Putcards.hide(i);
}else if (Public_data.data.playerlist[0][i] == 4) {
set_self(id_config.pass_id + Utl.changeToStatus(i),37,0,0,0);
for(var j = 0;j < id_config.hc_len[Utl.getMySeat()]; j++){
set_self(id_config.car_start[Utl.changeToStatus(i)] + j,37,0,0,0);
}
}else if (Public_data.data.playerlist[0][i] == -1) {
set_self(id_config.pass_id + Utl.changeToStatus(i),37,0,0,0);
Putcards.hide(i);
}
}
};
Putcards.hide = function(seat){
//隐藏出牌
for (var i = 0;i<id_config.hc_len[seat];i++) {
if (get_self(i+id_config.car_start[Utl.changeToStatus(seat)],19,0,0,0) == id_config.put_posi_y[Utl.changeToStatus(seat)]) {
set_self(id_config.car_start[Utl.changeToStatus(seat)]+i,37,0,0,0);
}
}
};
Putcards.sortleft = function(seat){//左边排位子
//第一张牌的id
var cardid = id_config.car_start[Utl.changeToStatus(seat)] + id_config.hc_len[seat] - Public_data.data.dealid[seat].length;
for (var i = 0;i < Public_data.data.dealid[seat].length; i++) {
if (i>=Public_data.data.dealid[seat].length) {
//put_posi_x 初始x put_intervalx 间距
set_self(cardid+i,18,id_config.put_posi_x[Utl.changeToStatus(seat)]+id_config.put_intervalx[Utl.changeToStatus(seat)]*(i-id_config.put_len[seat]),0,0);
set_self(cardid+i,19,id_config.put_posi_y[Utl.changeToStatus(seat)]+id_config.put_intervaly[seat],0,0);
set_self(cardid+i,20,id_config.put_wide[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,21,id_config.put_high[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,43,Public_data.data.dealid[seat][i]%54+1,0,0);
set_self(cardid+i,37,1,0,0);
}else{
//put_posi_x 初始x put_intervalx 间距
set_self(cardid+i,18,id_config.put_posi_x[Utl.changeToStatus(seat)]+id_config.put_intervalx[Utl.changeToStatus(seat)]*i,0,0);
set_self(cardid+i,19,id_config.put_posi_y[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,20,id_config.put_wide[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,21,id_config.put_high[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,43,Public_data.data.dealid[seat][i]%54+1,0,0);
set_self(cardid+i,37,1,0,0);
}
}
};
Putcards.sortright = function(seat){//右边排位子
//第一张牌的id
var cardid = id_config.car_start[Utl.changeToStatus(seat)] + id_config.hc_len[seat] - Public_data.data.dealid[seat].length;
//第一张牌的x坐标
set_self(cardid,18,id_config.put_posi_x[Utl.changeToStatus(seat)] - id_config.put_intervalx[Utl.changeToStatus(seat)] * (Public_data.data.dealid[seat].length-1),0,0);
for (var i = 0;i < Public_data.data.dealid[seat].length; i++) {
if (i>=Public_data.data.dealid[seat].length) {
var diyix = id_config.car_start[Utl.changeToStatus(seat)] - (id_config.put_intervalx[Utl.changeToStatus(seat)] * (Public_data.data.dealid[seat].length-11));
//sta_posi_x 初始x car_intervalx 间距
set_self(cardid+i,18,get_self(cardid,18)+id_config.put_intervalx[Utl.changeToStatus(seat)]*(i-id_config.put_len[seat]),0,0);
set_self(cardid+i,19,id_config.put_posi_y[Utl.changeToStatus(seat)]+id_config.put_intervaly[seat],0,0);
set_self(cardid+i,20,id_config.put_wide[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,21,id_config.put_high[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,43,Public_data.data.dealid[seat][i]%54+1,0,0);
set_self(cardid+i,37,1,0,0);
}else{
//sta_posi_x 初始x car_intervalx 间距
set_self(cardid+i,18,get_self(cardid,18)+id_config.put_intervalx[Utl.changeToStatus(seat)]*i,0,0);
set_self(cardid+i,19,id_config.put_posi_y[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,20,id_config.put_wide[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,21,id_config.put_high[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,43,Public_data.data.dealid[seat][i]%54+1,0,0);
set_self(cardid+i,37,1,0,0);
}
}
};
Putcards.sortin = function(seat){//中间排位子
//第一张牌的id
var cardid = id_config.car_start[Utl.changeToStatus(seat)] + id_config.hc_len[seat] - Public_data.data.dealid[seat].length;
//第一张牌的x坐标
if (Public_data.data.dealid.length%2) {//单数
set_self(cardid,18,id_config.put_posi_x[Utl.changeToStatus(seat)] - (id_config.put_intervalx[Utl.changeToStatus(seat)] * ((Public_data.data.dealid[seat].length - 1)/2)),0,0);
}else{//双数
set_self(cardid,18,id_config.put_posi_x[Utl.changeToStatus(seat)] - (id_config.put_intervalx[Utl.changeToStatus(seat)] * (Public_data.data.dealid[seat].length/2)) + id_config.put_intervalx[Utl.changeToStatus(seat)]/2,0,0);
}
for (var i = 0;i < Public_data.data.dealid[seat].length; i++) {
//sta_posi_x 初始x car_intervalx 间距
set_self(cardid+i,18,get_self(cardid,18)+id_config.put_intervalx[Utl.changeToStatus(seat)]*i,0,0);
set_self(cardid+i,19,id_config.put_posi_y[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,20,id_config.put_wide[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,21,id_config.put_high[Utl.changeToStatus(seat)],0,0);
set_self(cardid+i,43,Public_data.data.dealid[seat][i]%54+1,0,0);
set_self(cardid+i,37,1,0,0);
}
};
Putcards.yinchang = function(seat){//打牌隐藏
for (var i =0;i<id_config.hc_len[seat];i++) {
if (get_self(id_config.car_start[seat]+i,19,0,0,0) == id_config.put_posi_y[seat]) {
set_self(id_config.car_start[seat]+i,37,0,0,0);
}
}
};
Hand_card.click = function(gameid, spid, downx, downy, spid_up, upx, upy, timelong, no1, no2){
var y_up = id_config.sta_posi_y - id_config.intervalh; //点击后牌的y坐标
var y_down = id_config.sta_posi_y; //点击前牌的y坐标
if (get_self(spid,19,0,0,0)==y_up) {
set_self(spid,19,y_down,0,0);
}
else if (get_self(spid,19,0,0,0)==y_down){
set_self(spid,19,y_up,0,0);
}
if(id_config.but_id){
for (var i =0;i<id_config.hc_len[Utl.getMySeat()];i++) {
if (get_self(i+id_config.car_start[0],19,0,0,0)==y_up) {
set_self(id_config.but_id,41,1,0,0);
set_self(id_config.but_id,35,255,0,0);
break;
}else{
set_self(id_config.but_id,41,0,0,0);
set_self(id_config.but_id,35,100,0,0);
}
}
}
}
Hand_card.click_up = function(){
//选中牌后弹起时调用
var y_up = id_config.sta_posi_y[0] - id_config.intervalh; //点击后牌的y坐标
var y_down = id_config.sta_posi_y[0]; //点击前牌的y坐标
for(var i = 0; i < id_config.hc_len[Utl.getMySeat()]; i++){
set_self(id_config.mask+i,37,0,0,0);//隐藏遮罩
}
for (var i = 0; i < Public_data.select.length; i++) {
if (get_self(Public_data.select[i],19,0,0,0)==y_down) {
set_self(Public_data.select[i],19,y_up,0,0);
}
else if(get_self(Public_data.select[i],19,0,0,0)==y_up){
set_self(Public_data.select[i],19,y_down,0,0);
}
}
paidz();
mpbs(1);
if(id_config.but_id){
for (var i =0;i<id_config.hc_len[Utl.getMySeat()];i++) {
if (get_self(i+id_config.car_start[0],19,0,0,0)==y_up) {
set_self(id_config.but_id,41,1,0,0);
set_self(id_config.but_id,35,255,0,0);
break;
}else{
set_self(id_config.but_id,41,0,0,0);
set_self(id_config.but_id,35,100,0,0);
}
}
}
Public_data.select = [];
Public_data.clickid = 0;
Public_data.clickiniid = 0;
}
Hand_card.outmove = function(gameid, spid, downx, downy, movex,movey ,timelong,offmovex, offmovey, no1){
for(var i = 0; i < id_config.hc_len[Utl.getMySeat()]; i++){
set_self(id_config.mask+i,37,0,0,0);//隐藏遮罩
}
Public_data.select = []//选中牌清空
Public_data.clickid = gameabc_check_click(movex,movey);
if(Public_data.clickiniid < Public_data.clickid){//往右边移了
for(var i = 0; i < id_config.hc_len[Utl.getMySeat()]; i++){
if (id_config.car_start[0]+i >= Public_data.clickiniid && id_config.car_start[0]+i <= Public_data.clickid) {
set_self(id_config.mask+i,37,1,0,0);
set_self(id_config.mask+i,19,get_self(id_config.car_start[0]+i,19),0,0);
set_self(id_config.mask+i,18,get_self(id_config.car_start[0]+i,18),0,0);
Public_data.select.push(id_config.car_start[0]+i);
}
}
}else if (Public_data.clickiniid > Public_data.clickid) {//往左边移了
for(var i = 0; i < id_config.hc_len[Utl.getMySeat()]; i++){
if (id_config.car_start[0]+i <= Public_data.clickiniid && id_config.car_start[0]+i >= Public_data.clickid) {
set_self(id_config.mask+i,37,1,0,0);
set_self(id_config.mask+i,19,get_self(id_config.car_start[0]+i,19),0,0);
set_self(id_config.mask+i,18,get_self(id_config.car_start[0]+i,18),0,0);
Public_data.select.push(id_config.car_start[0]+i);
}
}
}else{//还在这张牌
Public_data.select = [Public_data.clickiniid];
set_self(id_config.mask+(Public_data.select-id_config.car_start[0]),37,1,0,0);
set_self(id_config.mask+(Public_data.select-id_config.car_start[0]),19,get_self(id_config.car_start[0]+(Public_data.select-id_config.car_start[0]),19),0,0);
set_self(id_config.mask+(Public_data.select-id_config.car_start[0]),18,get_self(id_config.car_start[0]+(Public_data.select-id_config.car_start[0]),18),0,0);
}
}
Hand_card.handcard_move = function(gameid, spid, downx, downy, movex,movey ,timelong,offmovex, offmovey, no1){
//手牌滑动
if (Public_data.select.length &&( gameabc_check_click(movex,movey) < id_config.car_start[0] || gameabc_check_click(movex,movey) >= id_config.car_start[0] + id_config.hc_len[Utl.getMySeat()])) {
Public_data.outmove = 1;
}
for (var i = 0;i<id_config.hc_len[Utl.getMySeat()];i++) {
if(Public_data.outmove == 0){//没出去过
if (gameabc_check_click(movex,movey)== i+id_config.car_start[0] && get_self(i+id_config.car_start[0],37) &&
(get_self(gameabc_check_click(movex,movey),19) == id_config.sta_posi_y[0] || get_self(gameabc_check_click(movex,movey),19) == id_config.sta_posi_y[0] - id_config.intervalh)) {
if(Public_data.clickid != gameabc_check_click(movex,movey)){
if(get_self(id_config.mask+i,37) == 0){//遮罩是隐藏的
//显示遮罩 添加选中
//Hand_card.mousemove (gameid, spid, downx, downy, movex,movey ,timelong,offmovex, offmovey, no1);//手牌滑动
set_self(id_config.mask+i,37,1,0,0);
set_self(id_config.mask+i,19,get_self(id_config.car_start[0]+i,19),0,0);
set_self(id_config.mask+i,18,get_self(id_config.car_start[0]+i,18),0,0);
Public_data.select.push(gameabc_check_click(movex,movey));
Public_data.clickid = gameabc_check_click(movex,movey);
}else{
if(Public_data.clickid > gameabc_check_click(movex,movey)){
//隐藏遮罩删除选中
set_self(id_config.mask+i+1,37,0,0,0);
Public_data.select.splice(Public_data.select.length-1,1);
Public_data.clickid = gameabc_check_click(movex,movey);
}else{
//隐藏遮罩删除选中
set_self(id_config.mask+i-1,37,0,0,0);
Public_data.select.splice(Public_data.select.length-1,1);
Public_data.clickid = gameabc_check_click(movex,movey);
}
}
}
}
}else if (Public_data.outmove == 1 && gameabc_check_click(movex,movey) >= id_config.car_start[0] && gameabc_check_click(movex,movey) < id_config.car_start[0] + id_config.hc_len[Utl.getMySeat()] &&
(get_self(gameabc_check_click(movex,movey),19) == id_config.sta_posi_y[0] || get_self(gameabc_check_click(movex,movey),19) == id_config.sta_posi_y[0] - id_config.intervalh)) {
Hand_card.outmove(gameid, spid, downx, downy, movex,movey ,timelong,offmovex, offmovey, no1);//移动到外面去了
}
}
}
Hand_card.handcard_down = function(gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2){
//手牌选中
for(var i = 0;i<id_config.hc_len[Utl.getMySeat()];i++){
if (spid_down == id_config.car_start[0]+i&&(get_self(spid_down,19) == id_config.sta_posi_y[0] || get_self(spid_down,19) == id_config.sta_posi_y[0] - id_config.intervalh)) {
Public_data.select.push(spid_down);
Public_data.clickid = spid_down;
Public_data.clickiniid = spid_down;
set_self(id_config.mask+i,37,1,0,0);
set_self(id_config.mask+i,19,get_self(id_config.car_start[0]+i,19),0,0);
set_self(id_config.mask+i,18,get_self(id_config.car_start[0]+i,18),0,0);
break;
}
}
}