热门标签 | 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太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
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社区 版权所有