前两篇的文章
记忆翻牌游戏(一)
记忆翻牌游戏(二)

接上回,对于上篇中的翻牌效果,虽然实现了鼠标点击翻牌,但是可以发现,已经翻开的扑克牌,依然被放置在牌桌上,没有被移除。
此篇就来实现移除效果。

先来看看最终效果。


上篇我们已经可以通过鼠标点击翻牌,要想实现移除效果,则需要对扑克牌进行配对检查。
基本思路如下:

  • 遍历扑克牌集合中的每一张扑克牌,如果牌是第一张被翻开的,记录下此时牌的点数,若是第二张被翻开的,也记录下牌的点数;
  • 将第一张牌的点数与第二张牌的点数进行比较,若点数相同,则移除这两张牌,若不同,则将两张牌恢复为初始状态(即背面朝上)。

在Table类的act()方法中添加以下配对检查的代码

  • 首先定义所需要的变量
Card card1 = null, card2 = null;  //用来保存两张牌的对象
int count = 0;                    //表示牌桌上被翻开的是第几张牌
int card1Value = 0,card2Vlaue = 0;//记录两张牌的点数
  • 接下来循环遍历扑克牌集合
    整体框架
for (int i=0; i< cards.size(); i++) {  //用for循环遍历集合cards中的所有牌if (cards.get(i).getFaceup() == true) { //如果遍历到的这张牌是翻开的count++;       //用count将牌桌上翻开的牌数累加if (count == 1) {          //如果是第一张翻开的牌}if (count == 2) {            //如果是第二张翻开的牌}    }}

通过count的值来确定当前被翻开的牌是第几张,为1则表示为第一张,只需保存其点数。

 if (count == 1) {         //如果是第一张翻开的牌card1 = cards.get(i);  card1Value = card1.getValue(); //变量card1Value记录第一张翻开牌的点数}

保存点数后继续遍历集合,若还有被点击翻开的扑克牌,则count值加为2,并且比较桌上被翻开的两张牌的点数是否相同。

 if (count == 2) {         //如果是第二张翻开的牌card2 = cards.get(i);card2Value = card2.getValue();   //变量card2Value记录第二张翻开牌的点数if (card1Value == card2Value) {   // 如果翻开的两张牌的点数是一样的 Greenfoot.playSound("WaterDrop.wav");Greenfoot.delay(10); //延迟10毫秒,游戏效果更好//移除翻开的两张同样的牌removeObject(card1);removeObject(card2);cards.remove(card1);cards.remove(card2);} else { //如果翻开的两张牌不同reenfoot.delay(15);// 将两张牌面朝下背朝上card1.turnFaceDown();card2.turnFaceDown();}break;   //剩下的牌不再遍历,结束for循环
}

通过比较card1Value和card2Value的值是否相同来判断两张牌是否相同,相同则调用removeObject()方法将其从牌桌移除,同时也需要调用remove()方法将其从整个扑克牌集合中移除。

完整代码如下:

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.ArrayList;
import java.util.Collections;/*** 牌桌类,提供游戏的运行场景*/
public class Table extends World{ArrayList<Card> cards = new ArrayList<Card>();  //声明一个保存扑克牌对象的集合cards //Table类的构造方法public Table() {   super(600, 400, 1);for (int i=1; i<=5; i++) {      //向集合cards中添加两组共10张5点以下的牌cards.add(new Card(i));cards.add(new Card(i));}Collections.shuffle(cards); //集合类Collections的混排算法,用于打乱集合cards中牌的顺序int x=100, y=100;   //牌桌上摆放牌的起点坐标for (int i=0; i<5; i++) {   //用for循环依次在牌桌上摆放每排5张,共两排的扑克牌addObject(cards.get(i) , x, y);addObject(cards.get(i+5) , x, y + cards.get(i).getImage().getHeight() + 20);x += cards.get(i).getImage().getWidth()+20;}}//act()方法是游戏单步执行的动作public void act() {     int count = 0, card1Value=0, card2Value=0;   //count表示牌桌上被翻开的第几张牌Card card1=null, card2=null;for (int i=0; i< cards.size(); i++) {   //用for循环遍历集合cards中的所有牌if (cards.get(i).getFaceup() == true) { //如果遍历到的这张牌是翻开的count++;       //用count将牌桌上翻开的牌数累加if (count == 1) {          //如果是第一张翻开的牌card1 = cards.get(i);  card1Value = card1.getValue(); //变量card1Value记录第一张翻开牌的点数}if (count == 2) {           //如果是第二张翻开的牌card2 = cards.get(i);card2Value = card2.getValue();   //变量card2Value记录第二张翻开牌的点数if (card1Value == card2Value) {   // 如果翻开的两张牌的点数是一样的 Greenfoot.playSound("WaterDrop.wav");Greenfoot.delay(10); //延迟10毫秒,游戏效果更好//移除翻开的两张同样的牌removeObject(card1);removeObject(card2);cards.remove(card1);cards.remove(card2);}else {  //如果翻开的两张牌不同Greenfoot.delay(15);// 将两张牌面朝下背朝上card1.turnFaceDown();card2.turnFaceDown();}break;  //两张牌如相同,则移除,如不同,则翻回来。剩下的牌不再遍历,结束for循环}}}}
}

至此,鼠标点击翻牌,并且相同点数的牌从牌桌上移除的效果已实现。

利用Greenfoot制作简单的小游戏——记忆翻牌游戏(三)相关推荐

  1. 利用Python制作简单的小程序:IP查看器

    前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固 ...

  2. 利用函数制作简单计算器小功能

    输入任意数字进行任意计算并输出结果. 注意: 要注意数据类型之间的转换: return返回的是值!

  3. android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏

    android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...

  4. python制作阴阳师脚本_利用python制作一个阴阳师小游戏

    利用python制作一个阴阳师小游戏 发布时间:2020-11-27 13:59:49 来源:亿速云 阅读:84 这期内容当中小编将会给大家带来有关利用python制作一个阴阳师小游戏,文章内容丰富且 ...

  5. 利用YQL制作自己的小工具

    YQL服务可以实现对网上不同数据源的query,filter,combine(查询,过滤,合并). YQL说明类似SQL.下面的例子就是用YQL说明实现从Flickr上得到一系列text为cat的图片 ...

  6. 利用DW制作简单的LOGO / 以及对CSS选择器的了解

    利用DW制作简单的LOGO 创建新的文件夹(Ctrl+shift+N) 了解CSS选择器 1.CSS选择器的分类 其中第三种id选择器是用的最多的,今天我们也要用到id选择器. 2.CSS是什么呢? ...

  7. 利用PHP制作简单的内容采集器

    利用PHP制作简单的内容采集器 作者:yzxh24    阅读人次:--    文章来源:天极论坛整理    发布时间:2018/4/23    网友评论()条   采集器,通常又叫小偷程序,主要是用 ...

  8. 利用PHP制作简单的内容采集器的原理分析

    利用PHP制作简单的内容采集器的原理分析 2008-12-12 11:24 前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路 ...

  9. 记忆翻牌游戏代码html,原生JS实现记忆翻牌游戏

    本文实例为大家分享了JS实现记忆翻牌游戏的具体代码,供大家参考,具体内容如下 html代码 css代码 * { padding: 0; margin: 0; } #game { width: 600p ...

  10. python连连看小游戏_利用Python制作一个连连看小游戏,边学边玩!

    导语 今天我们将制作一个连连看小游戏,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环 ...

最新文章

  1. [Bash] Search for Text with `grep`
  2. 动态rem与1px边框问题的理解
  3. 计算机文化基础教程教案,新版《计算机文化基础》教案.doc
  4. tf.reduce_max()函数的用法详解
  5. jvm 宕机 打印jvm_通过入侵JVM打印阵列
  6. CSS3几种新的长度单位
  7. python 模块路径搜索_Python模块搜索路径问题
  8. 转载 : JSP取得绝对路径
  9. 关于用mybatis调用存储过程时的入参和出参的传递方法
  10. matlabstrcmpi_matlab.学习命令中文版.doc
  11. python : pandas库的后继者polars库
  12. 【Codeforces Round #516_div2】Labyrinth【迷宫搜索】
  13. Microhard P900 900MHz跳频电台核心模块
  14. CSS 3 颜色属性
  15. win10读不到移动硬盘
  16. Strategic game poj1463
  17. Apache服务器访问过慢分析及解决
  18. vue中this.$confirm,确定和取消执行不同的逻辑处理
  19. 推荐100首值得听的英文歌【ZT】
  20. MBA案例分析(行销与营销之营销六)

热门文章

  1. windows 控制台提示:请求的操作需要提升
  2. 程序员小灰2021年整理
  3. 域名链接到服务器指定端口
  4. win10如何查看开机启动项
  5. php音乐云盘,百度云盘音乐、文件、图片外链的三个方法总结
  6. 36. linux系统日志在哪里看
  7. Pyramidal Feature Shrinking for Salient Object Detection阅读笔记
  8. 一个好用的windows文件搜索工具
  9. Ubuntu的下载安装教程--本人亲测
  10. vue实用echart饼图legend显示百分比