利用Greenfoot制作简单的小游戏——记忆翻牌游戏(三)
前两篇的文章
记忆翻牌游戏(一)
记忆翻牌游戏(二)
接上回,对于上篇中的翻牌效果,虽然实现了鼠标点击翻牌,但是可以发现,已经翻开的扑克牌,依然被放置在牌桌上,没有被移除。
此篇就来实现移除效果。
先来看看最终效果。
上篇我们已经可以通过鼠标点击翻牌,要想实现移除效果,则需要对扑克牌进行配对检查。
基本思路如下:
- 遍历扑克牌集合中的每一张扑克牌,如果牌是第一张被翻开的,记录下此时牌的点数,若是第二张被翻开的,也记录下牌的点数;
- 将第一张牌的点数与第二张牌的点数进行比较,若点数相同,则移除这两张牌,若不同,则将两张牌恢复为初始状态(即背面朝上)。
在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制作简单的小游戏——记忆翻牌游戏(三)相关推荐
- 利用Python制作简单的小程序:IP查看器
前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固 ...
- 利用函数制作简单计算器小功能
输入任意数字进行任意计算并输出结果. 注意: 要注意数据类型之间的转换: return返回的是值!
- android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏
android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...
- python制作阴阳师脚本_利用python制作一个阴阳师小游戏
利用python制作一个阴阳师小游戏 发布时间:2020-11-27 13:59:49 来源:亿速云 阅读:84 这期内容当中小编将会给大家带来有关利用python制作一个阴阳师小游戏,文章内容丰富且 ...
- 利用YQL制作自己的小工具
YQL服务可以实现对网上不同数据源的query,filter,combine(查询,过滤,合并). YQL说明类似SQL.下面的例子就是用YQL说明实现从Flickr上得到一系列text为cat的图片 ...
- 利用DW制作简单的LOGO / 以及对CSS选择器的了解
利用DW制作简单的LOGO 创建新的文件夹(Ctrl+shift+N) 了解CSS选择器 1.CSS选择器的分类 其中第三种id选择器是用的最多的,今天我们也要用到id选择器. 2.CSS是什么呢? ...
- 利用PHP制作简单的内容采集器
利用PHP制作简单的内容采集器 作者:yzxh24 阅读人次:-- 文章来源:天极论坛整理 发布时间:2018/4/23 网友评论()条 采集器,通常又叫小偷程序,主要是用 ...
- 利用PHP制作简单的内容采集器的原理分析
利用PHP制作简单的内容采集器的原理分析 2008-12-12 11:24 前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路 ...
- 记忆翻牌游戏代码html,原生JS实现记忆翻牌游戏
本文实例为大家分享了JS实现记忆翻牌游戏的具体代码,供大家参考,具体内容如下 html代码 css代码 * { padding: 0; margin: 0; } #game { width: 600p ...
- python连连看小游戏_利用Python制作一个连连看小游戏,边学边玩!
导语 今天我们将制作一个连连看小游戏,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环 ...
最新文章
- [Bash] Search for Text with `grep`
- 动态rem与1px边框问题的理解
- 计算机文化基础教程教案,新版《计算机文化基础》教案.doc
- tf.reduce_max()函数的用法详解
- jvm 宕机 打印jvm_通过入侵JVM打印阵列
- CSS3几种新的长度单位
- python 模块路径搜索_Python模块搜索路径问题
- 转载 : JSP取得绝对路径
- 关于用mybatis调用存储过程时的入参和出参的传递方法
- matlabstrcmpi_matlab.学习命令中文版.doc
- python : pandas库的后继者polars库
- 【Codeforces Round #516_div2】Labyrinth【迷宫搜索】
- Microhard P900 900MHz跳频电台核心模块
- CSS 3 颜色属性
- win10读不到移动硬盘
- Strategic game poj1463
- Apache服务器访问过慢分析及解决
- vue中this.$confirm,确定和取消执行不同的逻辑处理
- 推荐100首值得听的英文歌【ZT】
- MBA案例分析(行销与营销之营销六)