今天来学习怎样用Greenfoot制作一款记忆翻盘游戏。

游戏规则如下:首先在牌桌上摆放一系列的扑克牌,游戏开始时牌的背面朝上,玩家无法看到牌的点数(保证扑克牌的点数成对)。玩家任意翻开两张扑克牌,若起点数相同则从桌面上移除这两张扑克牌,若点数不同,则将其翻转,使牌的背面重新朝上,直至桌面上的所有牌都被移除,游戏结束。

先来看看最终效果

目录

一、 Greenfoot概述

二、Greenfoot安装

三、基本操作方法

四、 记忆翻牌游戏

一、Greenfoot概述

Greenfoot是由英国肯特大学的Michael和Martin设计的一款Java 游戏设计工具,是一个功能完整的开发环境,可以使用Java方便地编写游戏和进行模拟。

下图为Greenfoot的主界面

二、Greenfoot安装

下载地址:https://www.greenfoot.org/download

选择适合的版本下载即可。
下载完成后,双击安装

单击next

Install just for you,单击next

选择安装路径,next

点击Install,等待安装即可


单击Finish,完成安装

想改为中文界面的朋友,双击打开安装好的Greenfoot 选择Tools——Preferences

选择Interface,将Language改为中文

重启,再次打开Greenfoot,已经是中文界面了

三、基本操作方法
1. 创建游戏场景

单击剧本,选择新建一个Java剧本

在弹出来的对话框中设置名字和存储位置,

点击确定,出现一个空的游戏场景界面。界面右侧有两个类,场景类World和角色类Actor。
需要注意的是,这两个类都是抽象类,不能直接被使用,需要创建它们的子类才行。这里,有一个系统自动生成的子类MyWorld。

下面介绍如何新创建一个子类。
右键单击World,选择新建子类

在弹出的新建类的对话框中,输入新的类名,

点击确定,一个新的子类就创建好了。

双击新建好的子类,可看到系统自动生成的代码框架

其中super(60,400,1);表示的是创建一个尺寸为600像素×400像素大小的游戏场景。
右键单击新建的子类,单击设置图像。

在打开的对话框中选择一个图片,确定

右键点击myGame,new myGame(),此时游戏的背景图则被替换为我们刚才选择的图片

也可以从本地上传图片作为背景图,
同样,右键单击myGame子类,选择设置图像,单击左下角的设置,选择从库中导入,选择本地图片,确定


再次右键单击myGame,new myGame(),则背景换为我们自己从本地导入的图片

2. 添加游戏角色

在添加游戏角色之前,需要在游戏中创建一个角色,Greenfoot提供了一个角色类Actor。
右键单击Actor类,选择新建子类

输入新的类名

右键点击新建好的子类,选择设置图象,基本步骤和选择背景图一样



按住shift键选择角色,移动鼠标,可重复向该场景中添加多个对象

3. 运行游戏

点击下方的运行,即可运行程序

四、记忆翻牌游戏
1. 游戏整体设计

游戏场景和角色设计
作为记忆翻牌游戏,首先需要若干扑克牌参与游戏,一个放置扑克牌的牌桌,所以至少需要两个类,一个为扑克牌类(Card),一个为牌桌类(Table)。

游戏规则设计
若有相同点数的牌被翻开,则两张牌被移除,若翻开的两张牌点数不同,则重新将其翻面,当牌桌上所有的牌被移除后,游戏结束。

2. 游戏程序实现

初始化游戏场景,创建Card类和Table类,加入扑克牌背面图和牌桌图片


为Card类定义相关的字段和方法

private int value = -1;    //初始点数为-1,表示还没有生成确定的扑克牌。一旦生成了一张牌,其点数就不为-1
private boolean isFaceUp = false;  //isFaceUp=true,则牌正面朝上,否则背面朝上
private GreenfootImage faceUpImage = null;//faceUpImage表示牌的正面图案文件
private GreenfootImage faceDownImage = null;//faceDownImage表示牌的背面面图案文件

为Card类编写构造方法

public Card(int cardValue) {//cardValue是构造一张Card对象时传入的牌的点数value = cardValue;isFaceUp = false;  //所有被构造的牌都是背面朝上的String fileName = "hearts" + value + ".png";  //根据牌点数匹配的正面图案文件名//生成牌的正面图像对象faceUpImage = new GreenfootImage(fileName.toLowerCase());faceDownImage = new GreenfootImage("blueflip.png");  //生成牌的背面图案对象setImage(faceDownImage);    //让牌背面朝上放在牌桌上
}

因为设置的图片的名字和扑克牌的点数对应,可以根据扑克牌的点数来获取完整的图片文件名,根据此文件名来获取扑克牌正面的图像

String fileName = "hearts" + value + ".png";  //根据牌点数匹配的正面图案文件名
faceUpImage = new GreenfootImage(fileName.toLowerCase());//生成牌的正面图像对象

设置图片背面的图像,将其设置为扑克牌的默认图像

faceDownImage = new GreenfootImage("blueflip.png");   //生成牌的背面图案对象
setImage(faceDownImage);    //让牌背面朝上放在牌桌上

编写其他需要用到的方法

//act()方法是游戏单步执行的动作public void act() {}//获取这张牌的点数public int getValue(){return value;}//获取这张牌是否已翻面public boolean getFaceup(){return isFaceUp;}//将牌翻成背部朝上public void turnFaceDown(){isFaceUp = false;setImage(faceDownImage);}

完整代码如下

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)/*** 扑克牌类,可以被翻开*/
public class Card extends Actor{private int value = -1;    //初始点数为-1,表示还没有生成确定的扑克牌。一旦生成了一张牌,其点数就不为-1private boolean isFaceUp = false;   //isFaceUp=true,则牌正面朝上,否则背面朝上private GreenfootImage faceUpImage = null;//faceUpImage表示牌的正面图案文件private GreenfootImage faceDownImage = null;//faceDownImage表示牌的背面面图案文件//Card类的构造方法public Card(int cardValue) {//cardValue是构造一张Card对象时传入的牌的点数value = cardValue;isFaceUp = false;    //所有被构造的牌都是背面朝上的String fileName = "hearts" + value + ".png";  //根据牌点数匹配的正面图案文件名//生成牌的正面图像对象faceUpImage = new GreenfootImage(fileName.toLowerCase());faceDownImage = new GreenfootImage("blueflip.png");  //生成牌的背面图案对象setImage(faceDownImage);    //让牌背面朝上放在牌桌上}//act()方法是游戏单步执行的动作public void act() {}//获取这张牌的点数public int getValue(){return value;}//获取这张牌是否已翻面public boolean getFaceup(){return isFaceUp;}//将牌翻成背部朝上public void turnFaceDown(){isFaceUp = false;setImage(faceDownImage);}}

为Table类编写相关的字段和方法,这里使用ArrayList对象。
首先定义一个扑克牌对象的集合

ArrayList<Card> cards = new ArrayList<Card>();  //声明一个保存扑克牌对象的集合cards

编写构造方法。通过循环语句获取扑克牌对象

for (int i=1; i<=5; i++) {      //向集合cards中添加两组共10张5点以下的牌cards.add(new Card(i));cards.add(new Card(i));}
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;}

打乱扑克牌的顺序

Collections.shuffle(cards); //集合类Collections的混排算法,用于打乱集合cards中牌的顺序

完整代码如下

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) {          //如果是第一张翻开的牌}if (count == 2) {            //如果是第二张翻开的牌}}}}
}

点击运行,可看到牌桌上自动放入了10张牌,且每张牌背面朝上

注意,需要将牌放入FlopGame文件夹下面的images文件夹中,否则会出现错误


至此,翻牌游戏的界面初步制作完成。

利用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. React Native 之 网络请求 fetch
  2. mysql mmm 主主_Microsoft Azure部署MYSQL-MMM(2)配置主主复制
  3. Android 系统(161)---N/O版本上图库打开一张图片,图片从模糊到清晰的时间太长
  4. 苹果商店近期审核的问题
  5. 后缀的形容词_巧记形容词后缀 第二弹
  6. flash mx拖拽实例_Flash MX 2004的注释添加器面板
  7. 【ESP32】HardwareSerial库使用
  8. 关于5G使用的新型技术小结
  9. 张靓颖同学2006年日程表
  10. 《炬丰科技-半导体工艺》化学添加剂对KOH 溶液中Si表面反应性的影响
  11. Python +SQL Server 框架及返回结果处理
  12. 自动摘要生成(三):词向量相似度与有效词含量
  13. DSSD(Deconvolutional Single Shot Detector)
  14. 史上最全的PHP常用函数大全,不看看你就out了(还会不断更新哦!)
  15. 从傅里叶变换到Laplace变换
  16. Repeater嵌套总结
  17. 能播放任何格式视频的手机视频播放器
  18. esp8266驱动四脚oled显示文字和图片
  19. 【预测模型】基于布谷鸟算法优化BP神经网络实现数据预测matlab代码
  20. 浅谈特征方程及相关证明

热门文章

  1. Vue3 的新特性(二) —— Composition-Api
  2. 怎么利用电脑摄像头和上传图片读取扫描二维码内容
  3. linux安装杀毒软件
  4. linux ext4 格式化工具,ext4格式化软件 mkfs.ext4 快速格式化
  5. 在线压缩图片---*.jpg *.png
  6. 201903-2 二十四点
  7. 软件测试——风险分析
  8. 26款 网络会议/视频会议开源软件
  9. 2021牛客多校9.F.Train Wreck 构造
  10. Linux之父:不担心微软接管Linux