Java教程专栏:https://blog.csdn.net/qq_41806966/category_9929686.html
这节内容为完成上一节的练习和 学习类 与认识对象.
目录
上节游戏(练习)制作过程和思路
上一节博客链接: https://blog.csdn.net/qq_41806966/article/details/106201402
题目
游戏开始,主角可以轻松看到自己的 金额 信息(使用输出 + 变量),默认有 100 金币.
主角可以掷骰子,并进行对应功能.
主角掷骰子后,人机开始掷骰子(回合制)
胜利条件
- 简单的
- 玩家和人机 哪个金币先超过1000就算胜利
- 增加趣味性的(对于新手难度比较大,下面的骰子功能自己思考添加)
- 玩家和人机都有对应血量,掷骰子有功能可以消耗金币攻击对方,或者直接攻击,谁血量先少于0则谁输
骰子有 1,2,3,4,5,6 六个点数,每一个点数对应一个功能.
- 增加80金币
- 交给对方30金币(金币 - 30)
- 休息(不做操作)
- 这个实现其实就是没有这个选项(不需要判断随机数是否为3,或者随机数为3里面不写代码)
- 挖对方墙角(金币持续三回合减少,每回合-20)
- 这个实现 使用一个变量用来计数,在每回合执行操作前判断这个变量是否不为0(为0则代表没有这个效果),不为0则减少金币,并提示.(执行完后记得将变量的值 - 1)
- 都增加 50 金币
- 都减少 50 金币
整理思路
我提供了两种玩法,第一种比较简单
- 根据上面的题目我们可以获取主角只有一个属性(金币),以及一个人机的金币数量
- 利用之前所学的随机数,制作掷骰子事件,并通过 if...else(或者switch)来执行对应操作.
- 每次执行完操作后判断玩家金币 或者 人机金币是否大于1000来执行操作
我们要做的是第二种,
- 相比第一种,增加了两个属性,玩家和人机的血量
- 掷骰子的功能会有一些改变(这里为了能够对应第一种玩法,所以我就直接在原来玩法上进行增加)
- 胜利的条件改变了,从谁钱多谁赢变为了 谁把对方血搞没谁赢.
开始制作
我们制作的是第二种玩法
在之前的文件夹内新建一个文件夹,并新建一个java文件.
首先,我们把属性都定义好(玩家和人机金币,玩家和人机血量)
游戏逻辑.
玩家可以执行掷骰子操作(也就是简单地输入 1 我们用随机数执行掷骰子)
玩家执行了掷骰子操作后,进行对应处理,然后人机执行掷骰子操作,进行对应处理
(感觉有点重复对不对? 玩家和人机都可以掷骰子,并且都可以处理操作,而且都是相同的代码(后面学习到面向对象,就可以很好的处理这些重复部分了.))
我们的游戏有结束条件--谁先把对方血量弄没就赢,应该在哪判断呢?
在游戏中,能减少血量的地方就只有 掷骰子 部分了,我们只需要在 玩家和人机掷骰子完后判断一下就可以了.
因为有游戏胜利条件,所以我们的游戏是一个死循环(通过胜利来进行跳出)li
创建程序核心,游戏结束条件判断
代码如下
提示用户输入
使用到了 Scanner(相信各位对Scanner的使用已经非常熟悉了),别忘了导入
为了好一点的体验感我们需要在开头显示用户和人机的血量,金币信息
代码如下
完成掷骰子部分(生成随机数)
使用 Random,与Scanner一样,Random也只需要一个
骰子只有六个点数,所以我们只需要生成六个数字即可(nextInt(6))
代码如下
处理操作
剩下的就是对应的操作了
- 增加80金币
- 交给对方30金币(金币 - 30),并减少对方10生命值
- 休息(不做操作)
- 花费现有所有金币来对对方造成对应伤害(除以10) 注: 金币为负数就是给对方加血了66
- 都增加 50 金币,恢复20点生命值
- 都减少 50 金币 减少10生命值
代码如下
所有代码
import java.util.Scanner;
import java.util.Random;
public class Game {
public static void main(String[] args) {
//定义玩家和人机的属性
//可以一次定义多个变量,使用逗号隔开
//第一个为玩家金币,第二个为人机金币 默认有100金币
int money = 100,robotMoney = 100;
//玩家血量和人机血量,默认血量也是 100
int health = 100,robotHealth = 100;
//创建 Scanner 不要在循环里创建,我们只需要用到一个Scanner就行
Scanner sc= new Scanner(System.in);
//创建随机器 Random(别忘了导入)
Random r = new Random();
//程序核心
while (true) {
//提示用户
System.out.println("-------人机大战--------");
System.out.println("*****玩家信息*****");
System.out.println("血量: " + health);
System.out.println("金币: " + money);
System.out.println("*****人机信息*****");
System.out.println("血量: " + robotHealth);
System.out.println("金币: " + robotMoney);
System.out.println("******************");
System.out.println("请输入编号:");
System.out.println("1.掷骰子");
System.out.println("0.退出");
System.out.println("-----------------------");
//获取玩家要执行的操作 掷骰子/退出
int operation = sc.nextInt();
if (operation == 1) {
//掷骰子,这里就不执行操作,不然要把下面的代码复制到这里
//会显得很乱 所以执行完这个就会自动往下执行
//退出和乱输入都不会执行下面的代码
} else if (operation == 0) {
System.out.println("下次再见~");
break;
} else {
System.out.println("你输入的是啥?重新输入吧!");
continue;
}
//玩家掷骰子
int num = r.nextInt(6);
//玩家的操作
switch (num) {
case 0:
//增加80金币 这里的+=其实就是 money = money + 80
money += 80;
break;
case 1:
//交给对方30金币,减少对方10生命值
money -= 30;
robotMoney += 30;
//-=和+=一致 这里等于 robotHealth = robotHealth - 10
robotHealth -= 10;
break;
case 2:
//休息
break;
case 3:
//花费所有金币对对方造成伤害(负数则是增加血量)
robotHealth += money / 10;
money = 0;
break;
case 4:
//都增加50金币 恢复20生命值
money += 50; robotMoney += 50;
health += 20; robotHealth += 20;
break;
case 5:
//都减少50金币,减少10生命值
money -= 50; robotMoney -= 50;
health -= 10; robotHealth -= 10;
break;
}
//操作完成判断结果
if (health <= 0) {
//玩家失败
System.out.println("你居然被机器人打败了!");
break;
} else if (robotHealth <= 0) {
//玩家胜利
System.out.println("恭喜你 胜利!");
break;
}
//人机掷骰子
num = r.nextInt(6);
//人机的操作
switch (num) {
case 0:
//增加80金币 这里的+=其实就是 robotMoney = robotMoney + 80
robotMoney += 80;
break;
case 1:
//交给对方30金币,减少对方10生命值
robotMoney -= 30;
money += 30;
//-=和+=一致 这里等于 health = health - 10
health -= 10;
break;
case 2:
//休息
break;
case 3:
//花费所有金币对对方造成伤害(负数则是增加血量)
health += robotMoney / 10;
money = 0;
break;
case 4:
//都增加50金币 恢复20生命值
money += 50; robotMoney += 50;
health += 20; robotHealth += 20;
break;
case 5:
//都减少50金币,减少10生命值
money -= 50; robotMoney -= 50;
health -= 10; robotHealth -= 10;
break;
}
//操作完成判断结果
if (health <= 0) {
//玩家失败
System.out.println("你居然被机器人打败了!");
break;
} else if (robotHealth <= 0) {
//玩家胜利
System.out.println("恭喜你 胜利!");
break;
}
}
}
}
测试结果
本节正题-注释
在之前我们接触过注释,也就是我经常在代码里写的文字信息
为什么需要注释呢? 如果我不加注释的话,你们能看懂我代码吗?(如果你不懂的话)
这就是需要注释的原因,注释,不是给计算机用的,是给程序员看的.
注释会被编译器过滤掉,所以不用担心性能什么的问题.
当然,一个好的注释可以让别人快速理解(注意 是好的注释),请勿滥用
注释有几种,在Java中有以下几种注释
- 单行注释 (我之前用的大多都是单行注释)
- 多行注释
- 文档注释
单行注释
注释某一行,也就是这一行的内容被编译器不管直接跳过
语法: // 在双斜杠后面的都是注释 必须是双斜杠 像 /*/ /1/ 都是无效的
这个我们之前接触的挺多的.就不过多讲述了
多行注释
有的时候我们需要注释的文字是很多行(而不是单行),如果我们用单行注释虽然可以实现效果,
但是每一行你都要写上双斜杠,这时就可以用到多行注释.
语法: /* 斜杠加星号开头,星号加斜杠结尾,包含在这个里面的为多行注释,可以随便多少行,只要在这个里面 */
例子
/*
我是多行注释.
下面这一个代码作用是调用系统输出(废话)
我们最终结果会在控制台打印 [哈哈](废话)
*/
System.out.println("哈哈");
文档注释
我们写的注释更多的时候希望生成一个文档,而不是仅仅在java代码中,我们可以把文档给别人看,别人可以轻松知道我们干了什么...
语法: /** 文档注释的开头比多行注释多了一个星号 与多行注释一致 可以多行 */
文档注释包含很多内容,我们后面详细讲解.
总结
注释可以让别人快速理解我们的代码.
Java中的注释分为单行注释,多行注释,文档注释
文档注释可以把注释的内容生成为文档给别人观看
--------------------
思想的升华.
下一节学习类与对象.