热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java第十二次作业:什么是一维数组?什么是对象数组?吃金币游戏2.0版新增炸弹功能新增游戏倒计时功能新增胜利失败检测功能使用如鹏游戏引擎制作窗体一维数组设置金币...

什么是数组?数组的定义:是用统一的名字代表这批数据,用序号来区分各个数据。数组是无序的数据元素按有序的下标组成的集合,分配固

什么是数组?

数组的定义:是用统一的名字代表这批数据,用序号来区分各个数据。数组是无序的数据元素按有序的下标组成的集合,分配固定空间大小的一种容器。

如何理解:其实就是一个同时放很多数据的变量。

a=1;

a=2;

a=3;

这成了反复赋值,最后a=3;

a怎么能同时放下1,2,3......?

如 int a0;int a1; int a2; 同时具备3个变量才能存储。

一定让a存下3个或更多数据呢?

如果是同样的数据类型,这时用一个变量名 a 来放这些数据,这就是数组。

如下:

a0=1;

a1=2;

a2=3;

a3=4;

a4=5;

a5=6;

这样变量名字还是变了,我们用 a[下标] 来表示数组中的某个元素

归纳一下:如何赋值一个数组呢? 确定数组的数据类型 int a[20] 下标从0开始。//for(int i=0;// orc guai[100];

a[0]=1;

a[1]=2;

a[2]=3;

.........a[19];

存储固定大小同类元素的容器。

两种定义方法:

一种:

dataType[] arrayName = new dataType[arraySize];

int [] arr=new int[10];

arr[0]=22;

arr[1]=18;

........

arr[9]=321;

另一种:

dataType[] arrayName = {value0, value1, ..., valuek};

int [] arr={238,23,21,34,87,2,3,19,198,28};


 

使用一位数组解决 1 1 2 3 5 8 13 数列问题 斐波纳契数列 Fibonacci

//一维数组 输出30个Fibonacci数列
#include
using namespace std;int main(){//定义一个一维数组int arr[30]&#61;{1,1};//造fabonacci数组for(int i&#61;2;i<30;i&#43;&#43;) {arr[i]&#61;arr[i-1]&#43;arr[i-2];}//遍历一下for(int i&#61;0;i<30;i&#43;&#43;){cout<endl;} return 0;
}

分析&#xff1f;

1 1 2 3 5 8 13 这个数列的下一个是什么&#xff1f;得到什么规律&#xff1f;如何用一维数组实现&#xff1f;

把C&#43;&#43;的程序编程Java的。


 

一维数组的排序&#xff0c;把数组中的元素按照从小到大的顺序输出&#xff1f;

两种方法选择法与冒泡法

选择法的思路&#xff1f;

思路&#xff1a;用一个数组元素和所有其他的所有元素PK&#xff0c;谁小谁放第一个&#xff0c;确定一个位置再确定下一个位置&#xff0c;一次类推

把下边c&#43;&#43;的代码换成Java的

 

#include
using namespace std;int main(){//声明一维数组&#xff1f;整型的一维数组&#xff0c;就是数组中所有的元素都是int int arr[10]&#61;{23,234,3,1,19,21,231,88,90,11};for(int i&#61;0;i<10;i&#43;&#43;){cout<<"一维数组的第 "<" 个值是 "<endl;}//请你给刚才的数组的进行排序&#xff0c;要求从小到大输出 &#xff08;选择法&#xff09;
// for(int i&#61;0;i<10-1;i&#43;&#43;){
// for(int j&#61;i&#43;1;i<10;j&#43;&#43;){
// if(array[i]>array[j]){
// int temp;
// temp&#61;array[i];
// array[i]&#61;array[j];
// array[j]&#61;temp;
// }
// }
// }for(int i&#61;0;i<10-1;i&#43;&#43;) {for(int j&#61;i&#43;1;j<10;j&#43;&#43;) {if(arr[i]>arr[j]) {int temp;temp&#61;arr[i];arr[i]&#61;arr[j];arr[j]&#61;temp;}}}//排序后再遍历字符一下数组for(int i&#61;0;i<10;i&#43;&#43;){cout<<"遍历后一维数组的第 "<" 个值是 "<endl;}return 0;
}

 

选择法的思路&#xff1f;

思路&#xff1a;

数组中相邻的两个元素两两比较&#xff0c;逐步把小的放在前面&#xff0c;一轮过后最大的数值如石头一样沉入水底&#xff0c;而相对较小的数值如气泡逐渐在水中上浮&#xff0c;经过n轮的两两比较冒泡排序

把下边c&#43;&#43;的代码换成Java的

#include
using namespace std;int main(){//声明一维数组&#xff1f;整型的一维数组&#xff0c;就是数组中所有的元素都是int int arr[10]&#61;{23,234,3,1,19,21,231,88,90,11};for(int i&#61;0;i<10;i&#43;&#43;){cout<<"一维数组的第 "<" 个值是 "<endl;}for(int i&#61;0;i<10;i&#43;&#43;) {for(int j&#61;0;j<10-1-i;j&#43;&#43;) {if(arr[j]>arr[j&#43;1]) {int temp;temp&#61;arr[j];arr[j]&#61;arr[j&#43;1];arr[j&#43;1]&#61;temp;}}}//排序后再遍历字符一下数组for(int i&#61;0;i<10;i&#43;&#43;){cout<<"遍历后一维数组的第 "<" 个值是 "<endl;}return 0;
}


 

什么是对象数组&#xff1f;

人类对象数组——一堆人&#xff0c;实例如下&#xff1a;

package com.swift;public class PersonArray
{
public static void main(String args[]){person per[]&#61;new person[3];per[0]&#61;new person("张三",20);per[1]&#61;new person("李四",22);per[2]&#61;new person("王五",23);for (int x&#61;0;x){per[x].getinfo();}}
}
class person
{
private String name;private int age;public person(String name,int age){this.name&#61;name;this.age&#61;age;}public void getinfo(){System.out.println("姓名: "&#43;this.name&#43;" 年龄: "&#43;this.age);}
}

 最后使用一维数组来完成吃金币游戏中&#xff0c;成堆的金币&#xff0c;很多炸弹的布置。

 实现游戏中生成8个金币精灵和3个炸弹精灵&#xff0c;每个精灵有自己的精灵序号&#xff0c;和在游戏窗口中的横纵坐标

游戏代码如下&#xff1a;

package com.swift;import java.awt.Color;
import java.awt.Point;
import java.awt.event.KeyEvent;import com.rupeng.game.GameCore;
/*** &#64;author swift* &#64;version 2.0* &#64;category 新增炸弹功能&#xff0c;精灵如果吃到炸弹立即死亡&#xff0c;游戏结束&#xff1b;* &#64;category 新增游戏倒计时功能&#xff0c;倒计时60秒* &#64;category 新增游戏胜利失败功能&#xff0c;吃完金币则胜利&#xff0c;吃到炸弹失败*/
public class Coin2 implements Runnable {public static void main(String[] args) {GameCore.start(new Coin2());}&#64;Overridepublic void run() {//设置窗体大小、标题、背景GameCore.setGameSize(800, 345);GameCore.setGameTitle("用键盘操控精灵移动的小游戏");GameCore.loadBgView("bg.jpg");// 设置女精灵出现及出场位置int spriteGirl &#61; 0;GameCore.createSprite(spriteGirl, "guizi");GameCore.playSpriteAnimate(spriteGirl, "run", true);GameCore.setSpritePosition(spriteGirl, 140, 190);// 使用数组放置8个金币的数量、横坐标、纵坐标int[] coinNum &#61; { 1, 2, 3, 4, 5, 6, 7, 8 };int[] coinXDate &#61; { 100, 200, 300, 400, 500, 600, 700, 730 };int[] coinYDate &#61; { 140, 180, 150, 190, 140, 170, 160, 140 };// 使用数组放置3个炸弹的数量、横坐标、纵坐标int[] bombNum &#61; { 9, 10, 11 };int[] bombXDate &#61; { 250, 450, 650 };int[] bombYDate &#61; { 160, 160, 190 };//boolean[] coinIsDead &#61; new boolean[8];//设置右上角显示的金币图片和吃到的金币数量GameCore.createImage(0);GameCore.setImageSource(0, "bigCoin.png");GameCore.setImagePosition(0, 710, 20);GameCore.createText(0, "NUM");GameCore.setTextColor(0, Color.WHITE);GameCore.setTextPosition(0, 650, 25);GameCore.createText(1, "0");GameCore.setTextPosition(1, 760, 25);GameCore.setTextColor(1, Color.WHITE);//设置左上角显示的时间倒计时GameCore.createText(3, "Time-Left");GameCore.setTextColor(3, Color.WHITE);GameCore.setTextFontSize(3, 20);GameCore.setTextPosition(3, 25, 5);GameCore.createText(4, "60");GameCore.setTextPosition(4,60, 25);GameCore.setTextColor(4, Color.WHITE);GameCore.setTextFontSize(4, 28);//设置游戏倒计时的时间开始点long timeBegin&#61;System.currentTimeMillis();//设置吃掉金币前金币依然活着 另一种初始化数组方法 boolean[]boolean[] coinIsDead&#61;{false,false,false,false,false,false,false,false};//金币精灵死亡数int textNum &#61; 0;//根据横纵坐标设置金币精灵在游戏中的出现for (int i &#61; 0; i ) {GameCore.createSprite(coinNum[i], "coin");GameCore.setSpritePosition(coinNum[i], coinXDate[i], coinYDate[i]);GameCore.playSpriteAnimate(coinNum[i], "rotate", true);}//根据横纵坐标设置炸弹精灵在游戏中的出现for (int i &#61; 0; i ) {GameCore.createSprite(bombNum[i], "bomb");GameCore.playSpriteAnimate(bombNum[i], "laser", true);GameCore.setSpritePosition(bombNum[i], bombXDate[i], bombYDate[i]);}//创建新的爆炸精灵&#xff0c;等待触发int newBombNum&#61;12;GameCore.createSprite(newBombNum, "bomb");//创建获胜或失败时的文本&#xff0c;等待触发int newTextNum&#61;2;//无限循环获取时时键盘信息&#xff0c;改变女精灵的位置for (;;) {int codeNum &#61; GameCore.getPressedKeyCode();Point position &#61; GameCore.getSpritePosition(spriteGirl);//如果按向上或W键则向上移动 并且设置上边界为135if (codeNum &#61;&#61; KeyEvent.VK_UP || codeNum &#61;&#61; KeyEvent.VK_W) {if (position.y > 135) {GameCore.setSpritePosition(spriteGirl, position.x, --position.y);GameCore.pause(1);}}//如果按向下或S键则向下移动 并且设置下边界为190if (codeNum &#61;&#61; KeyEvent.VK_DOWN || codeNum &#61;&#61; KeyEvent.VK_S) {if (position.y <190) {GameCore.setSpritePosition(spriteGirl, position.x, &#43;&#43;position.y);GameCore.pause(1);}}//如果按向左或A键则向左移动 并且设置左边界为0if (codeNum &#61;&#61; KeyEvent.VK_LEFT || codeNum &#61;&#61; KeyEvent.VK_A) {if (position.x > 0) {GameCore.setSpriteFlipX(spriteGirl, true);GameCore.setSpritePosition(spriteGirl, --position.x, position.y);GameCore.pause(2);}}//如果按向右或D键则向右移动 并且设置右边界为730if (codeNum &#61;&#61; KeyEvent.VK_RIGHT || codeNum &#61;&#61; KeyEvent.VK_D) {if (position.x <730) {GameCore.setSpriteFlipX(spriteGirl, false);GameCore.setSpritePosition(spriteGirl, &#43;&#43;position.x, position.y);GameCore.pause(1);}}//得到当前女精灵的位置Point pGirl &#61; GameCore.getSpritePosition(spriteGirl);//判断女精灵和任意金币的距离&#xff0c;足够接近金币就消失&#xff0c;并设置该金币已死for (int i &#61; 0; i ) {if(coinIsDead[i]) {continue;}Point pCoin &#61; GameCore.getSpritePosition(coinNum[i]);double distance &#61; Math.sqrt((Math.pow((pCoin.x - pGirl.x), 2) &#43; Math.pow((pCoin.y - pGirl.y), 2)));if (distance <30) {GameCore.hideSprite(coinNum[i]);coinIsDead[i] &#61; true;textNum &#61; 0;//这句含义很大&#xff0c;无限循环每次到这清零&#xff0c;不然数字无限疯长for(int j&#61;0;j) {if(coinIsDead[j]&#61;&#61;true){//我把这写成了i&#xff0c;所以只要吃掉一个&#xff0c;就是8了&#xff0c;应该是jtextNum&#43;&#43;;}}GameCore.setText(1, Integer.toString(textNum));//这句放在循环外边&#xff0c;不然
}if(textNum&#61;&#61;8) {//输出文本GameCore.createText(newTextNum, "You Win");GameCore.setTextPosition(newTextNum, 300, 150);GameCore.setTextColor(newTextNum, Color.RED);GameCore.setTextFontSize(newTextNum, 88);GameCore.pause(3000);GameCore.exit();}}//判断女精灵和任意炸弹的距离&#xff0c;足够接近炸弹就爆炸&#xff0c;游戏失败for (int i &#61; 0; i ) {Point pBomb &#61; GameCore.getSpritePosition(bombNum[i]);double distance &#61; Math.sqrt((Math.pow((pBomb.x - pGirl.x), 2) &#43; Math.pow((pBomb.y - pGirl.y), 2)));if (distance <20) {//隐藏原炸弹精灵
GameCore.hideSprite(bombNum[i]);//出现新爆炸精灵GameCore.playSpriteAnimate(newBombNum, "fire", true);//在原来炸弹的位置出现新炸弹
GameCore.setSpritePosition(newBombNum, pBomb.x, pBomb.y);GameCore.pause(3000);//输出文本GameCore.createText(newTextNum, "You Lose");GameCore.setTextPosition(newTextNum, 300, 150);GameCore.setTextColor(newTextNum, Color.RED);GameCore.setTextFontSize(newTextNum, 88);GameCore.pause(2500);GameCore.exit();}}//设置游戏倒计时的时间结束点long timeEnd&#61;System.currentTimeMillis();int timeText&#61;(int)(60-(timeEnd-timeBegin)/1000);GameCore.setText(4, Integer.toString(timeText));if(timeText&#61;&#61;0) {GameCore.alert("游戏通关时间已到&#xff0c;即将结束。");GameCore.exit();}}}
}

&#xff08;1&#xff09;新增炸弹功能&#xff0c;精灵如果吃到炸弹立即死亡&#xff0c;游戏结束&#xff1b;
&#xff08;2&#xff09;新增游戏倒计时功能&#xff0c;倒计时60秒
&#xff08;3&#xff09;新增游戏胜利失败功能&#xff0c;吃完金币则胜利&#xff0c;吃到炸弹失败

游戏包及素材下载地址&#xff1a;
https://pan.baidu.com/s/1jHI54Po






转载于:https://www.cnblogs.com/qingyundian/p/7771222.html


推荐阅读
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 使用Java计算两个日期之间的月份数
    本文详细介绍了利用Java编程语言计算两个指定日期之间月份数的方法。文章通过实例代码讲解了如何使用Joda-Time库来简化日期处理过程,旨在为开发者提供一个高效且易于理解的解决方案。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文介绍如何通过Java代码调用阿里云短信服务API来实现短信验证码的发送功能,包括必要的依赖添加和关键代码示例。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • 本文深入探讨了动态赋值的概念及其在编程实践中的应用,特别是通过Java代码示例来展示如何利用循环结构动态地为数组分配值。 ... [详细]
  • 本文探讨了如何将Python对象转换为字节流,以实现文件保存、数据库存储或网络传输的需求。主要介绍了利用pickle模块进行序列化的具体方法。 ... [详细]
  • Vue CLI 基础入门指南
    本文详细介绍了 Vue CLI 的基础使用方法,包括环境搭建、项目创建、常见配置及路由管理等内容,适合初学者快速掌握 Vue 开发环境。 ... [详细]
author-avatar
岁月无言0106
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有