翻开的2张牌如果配对就会消除,否则2张牌都会返回背面。

需求分析

怎么绘制正的牌面和背的牌面及配对成功后怎么消除牌面

怎么生成牌组并且确定每张牌的位置和对应的图片

怎么洗牌

怎么记录牌组的配对信息

怎么确定点击事件是第一次点击还是第二次点击

作弊事件的处理:两次点击同一张牌 点击已经消除的牌面 点击牌面之外的区域

牌翻开之后需要给一定时间让玩家看清楚,怎么实现暂停

鼠标点击事件的响应及获得鼠标点击位置的坐标从而确定点击的是哪一张牌

MYCode:

test

var ctx;

var canvas;

var card;

var first_pick = true; //第一次点击的标志

var first_card = -1;

var second_card;

var back_color = "rgb(255,0,0)"; //卡片背面颜色

var table_color = "#FFF";

var deck = []; //note

var first_x = 10;

var first_y = 50;

var margin = 30;

var card_width = 50;

var card_height = 50;

var pairs = [

["1_a.jpg", "1_b.jpg"],

["2_a.jpg", "2_b.jpg"],

["3_a.jpg", "3_b.jpg"],

["4_a.jpg", "4_b.jpg"],

["5_a.jpg", "5_b.jpg"]

];

function draw_back()//绘制卡片背面

{

ctx.fillStyle = back_color;

ctx.fillRect(this.sx, this.sy, this.swidth, this.sheight);

}

function Card(sx, sy, swidth, sheight, img, info)//构造函数

{

this.sx = sx;

this.sy = sy;

this.swidth = swidth;

this.sheight = sheight;

this.info = info;

this.img = img;

this.draw = draw_back;

}

function make_deck()//生成卡组并绘制

{

var i;

var a_card;

var b_card;

var a_pic;

var b_pic;

var cx = first_x;

var cy = first_y;

for (i = 0; i < pairs.length; i++)

{

a_pic = new Image();

a_pic.src = pairs[i][0];

a_card = new Card(cx, cy, card_width, card_height, a_pic, i);

deck.push(a_card);

b_pic = new Image();

b_pic.src = pairs[i][1];

b_card = new Card(cx, cy + card_height + margin, card_width, card_height, b_pic, i);

deck.push(b_card);

cx = cx + card_width + margin; //note

a_card.draw();

b_card.draw();

}

}

function shuffle()//洗牌

{

var i;

var j;

var temp_info;

var temp_img;

var deck_length = deck.length;

var k;

for (k = 0; k < 3 * deck_length; k++)

{

i = Math.floor(Math.random() * deck_length);

j = Math.floor(Math.random() * deck_length);

temp_info = deck[i].info;

temp_img = deck[i].img;

deck[i].info = deck[j].info;

deck[i].img = deck[j].img;

deck[j].info = temp_info;

deck[j].img = temp_img;

}

}

function choose(ev)

{

//var out;

var mx;

var my;

//var pick1;

//var pick2;

var i;

//note

if (ev.layerX || ev.layerX == 0) { // Firefox

mx = ev.layerX;

my = ev.layerY;

} else if (ev.offsetX || ev.offsetX == 0) { // Opera

mx = ev.offsetX;

my = ev.offsetY;

}

for (i = 0; i < deck.length; i++)

{

card = deck[i];

if (card.sx >= 0)//牌未被消除

{

//判断点击的是哪一张牌

if (mx > card.sx && mx < card.sx + card.swidth && my > card.sy && my < card.sy + card.sheight)

{

if (i != first_card)//如果两次点击同一张牌不做处理

break;

}

}

}

if (i < deck.length)

{

if (first_pick)//如果是第一次点击

{

first_card = i;

first_pick = false; //note

ctx.drawImage(card.img, card.sx, card.sy, card.swidth, card.sheight);

}

else

{

first_pick = true; //note

second_card = i;

ctx.drawImage(card.img, card.sx, card.sy, card.swidth, card.sheight);

tid=setTimeout(flip_back,1000);

}

}

}

function flip_back()

{

if (card.info == deck[first_card].info)//配对成功

{

ctx.fillStyle = table_color;

ctx.fillRect(deck[first_card].sx, deck[first_card].sy, deck[first_card].swidth, deck[first_card].sheight);

ctx.fillRect(deck[second_card].sx, deck[second_card].sy, deck[second_card].swidth, deck[second_card].sheight);

deck[first_card].sx = -1;

deck[second_card].sy = -1;

first_card=-1;

}

else

{

deck[first_card].draw();

deck[second_card].draw();

first_card=-1;

}

}

function init()

{

canvas = document.getElementById('canvas');

canvas.addEventListener('click', choose, false);

ctx = canvas.getContext('2d');

make_deck();

shuffle();

}

123142

java记忆翻牌_html5记忆翻牌游戏相关推荐

  1. Java制作的类祖码游戏-数字祖码

    古老的传说--祖玛     20世纪初,传说在秘鲁安第斯山脉的崇山峻岭中有座神秘古城.西班牙人在长达300多年的殖民统治期间对它一无所知,秘鲁独立后100年里也无人涉足.在400年的时光中,只有翱翔的 ...

  2. java读取war3模型_GitHub - wucao/jw3gparser: Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具)...

    jw3gparser Java解析<魔兽争霸3>游戏录像工具,可解析w3g.nwg(网易对战平台录像)格式录像. 使用方法 public class Test { public stati ...

  3. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

  4. 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏

    基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...

  5. java毕业设计——基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码)——打飞机游戏

    基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME+sqlserver的打飞机游戏设计与实现,文章末尾附有本毕业设计的 ...

  6. Java窗体实现飞机躲子弹游戏

    前几天做了Java窗体实现飞机躲子弹游戏,我觉得很有必要做个笔记方便以后自己和他人查阅. 主要功能是:在一个窗体里面,用方向键盘控制飞机图片移动来躲避满屏的子弹. 由于篇幅的关系,这里主要做一个整体的 ...

  7. 如何有效的记忆和提取记忆

    [BetterExplained]如何有效地记忆与学习 BY  刘未鹏 – MARCH 28, 2009POSTED IN: 学习方法, 思维改变生活 你所拥有的知识并不取决于你记得多少,而在于它们能 ...

  8. Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码

    源码介绍 Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排 ...

  9. 对对碰java_Java开发学习之用Java打造一款对对碰游戏(下篇)

    本文主要向大家介绍了Java开发学习之用Java打造一款对对碰游戏,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助. 在之前的文章介绍了对对碰游戏的理论部分和介绍了JLabel.JBu ...

  10. 横版java_Project4 自己用java写的横版格斗游戏 功能还不是很复杂 可以作为参考~ Other Games 其他 238万源代码下载- www.pudn.com...

    文件名称: Project4下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 5963 KB 上传时间: 2013-07-17 下载次数: 4 提 供 者: lyk ...

最新文章

  1. 2021年大数据Kafka(一):❤️消息队列和Kafka的基本介绍❤️
  2. devexpress toolbar 填充整行宽度
  3. Redux学习(2) ----- 异步和中间件
  4. 大数据时代企业如何保障数据安全?这款工具值得一看
  5. 解决Visual Studio (VS) 插件下载缓慢
  6. Hadoop视频教程资源链接
  7. stats | 广义线性模型(二)——泊松回归
  8. java 抽象属性_怎样在java中定义一个抽象属性
  9. WinCE下直接启动自己应用程序的方法
  10. java中两个源文件_两个java源文件同属一个包,其中一个类引用了另一个,在用javac编译时,报错找不到引用的类,import无作用...
  11. Unity3D学习1--Unity基础
  12. 场景法设计测试用例ATM机取款问题
  13. 天玑处理器排行榜2022 联发科天玑处理器性能排行榜2022
  14. 最全最全的文件扩展名
  15. Python爬取豆瓣高分图书TOP100存入Excel
  16. java金额转换函数_将阿拉伯数字转换成人民币大写形式的JAVA工具类
  17. esxi远程管理端口_如何在 vmware esxi 中开放 VNC功能及端口实现远程管理 完整篇...
  18. 直播视频网站源码,进度条渐变效果
  19. TIME_WAIT详解
  20. Kubectl(完整)基本操作命令

热门文章

  1. laravel:如何快速实现数据填充,创建模拟数据(使用seeder)
  2. 来自一个大三开学三周的huster的迷茫与失措
  3. 计算机安全论文文献,计算机专业毕业论文参考文献
  4. Learn C++学习笔记:第M章—最常用的智能指针:std::unique_ptr std::make_unique
  5. Backtrader量化平台教程(五)Signal
  6. 如何查看电脑操作系统及系统类型
  7. 通信室计算机室采购配置co2灭火器,2019一级消防案例分析考点:民用类建筑消防设施的配置...
  8. 章文嵩:怎样做开源才有意义?
  9. 通过transform,纯css写出3d环绕效果
  10. 电脑如何设置日程提醒闹钟