首先我们来设计一下游戏规则和玩法,游戏规则也很简单:石头剪子布,石头吃剪刀,剪刀吃布,布包石头。程序运行后,玩家要选择出拳,随后程序自动出拳进行比较,赢家会得到1分,率先得到5分的一方胜利,玩家可以随时退出游戏。
所用技术: 循环和判断
控制台输入 Scanner
随机数 random
代码流程图:
Java的选择语句
[1] if单分支语法结构:
if(布尔表达式){
语句块
}
if语句对布尔表达式进行一次判定,若判定为真,则执行{}中的语句块,否则跳过该语句块。流程图如图所示:
[2] if 双分支语法结构:
if(布尔表达式){
语句块1
}else{
语句块2
}
当布尔表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。流程图如图所示:
[3] if 多分支语法结构:语法结构:
if(布尔表达式1) {
语句块1;
} else if(布尔表达式2) {
语句块2;
}……
else if(布尔表达式n){
语句块n;
} else {
语句块n+1;
}
当布尔表达式1为真时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;否则,继续判断布尔表达式3······;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。流程图如图所示:
[4] switch 语句也称为 分支语句 ,其和 if 语句有点类似,都是用来判断值是否相等,但 switch 默认只支持 byte 、 short 、 int 、 char 这四种类型的比较, JDK8 中也允许 String 类型的变量做对比
java循环语句
【1】while 语法结构:
while (布尔表达式) {
循环体;
}
在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会再开始前重新计算一次。
语句中应有使循环趋向于结束的语句,否则会出现无限循环–––"死"循环。
while循环结构流程图如图所示:
【2】do-while 语法结构:
do {
循环体;
} while(布尔表达式) ;
do-while循环结构会先执行循环体,然后再判断布尔表达式的值,若条件为真,执行循环体,当条件为假时结束循环。do-while循环的循环体至少执行一次。do-while循环结构流程图如图所示:
【3】for语法结构:
for (初始表达式; 布尔表达式; 迭代因子) {
循环体;
}
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子。
初始化部分设置循环变量的初值
条件判断部分为任意布尔表达式
迭代因子控制循环变量的增减
for循环在执行条件判定后,先执行的循环体部分,再执行步进。
for循环结构的流程图如图所示:
控制台输入
Java控制台输入的三种实现方法:使用标准输入对象System.in,使用Scanner和使用字符流从控制台输入
使用控制台输入有三个步骤:
1、引入Scanner类
import java.util.Scanner;
2、创建Scanner对象
Scanner scan = new Scanner(System.in);
3、接收控制台输入的数据
int
n=sc.nextInt();
//接收整数类型输入
String n=sc.nextLine();
//接收字符串
char
n=(
char
)System.in.read();
//直接获取一个字符
char
n=sc.next().charAt(
0
);
//先从控制台接收字符串,再接收它的第一个字符
随机数
随机数:这个数在生成之前我们不确定这个数是多少,不可知
在java中依靠一个类:Math 类 帮助我们生成,这个类中有一个方法专门用来生成随机数:
Math.random() -------> [0.0,1.0)
Math.random()*6 ----->[0.0,6.0)
(int)(Math.random()*6) ----->[0,5]
(int)(Math.random()*6) +1 ----->[1,6]
应用到程序中:
int num1 = (int)(Math.random()*6) +1;
int num2 = (int)(Math.random()*6) +1;
int num3 = (int)(Math.random()*6) +1;
猜拳游戏完整代码:
import java.util.Random;
import java.util.Scanner;
public class MethodBlogs {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("\"石头剪刀布,电脑已就绪!游戏规则如下:和电脑猜拳\n" + " 1【石头】;2【剪刀】;3【布】\n");
int comIntegral, plaIntegral;
plaIntegral = comIntegral = 0;
while (plaIntegral<5 | plaIntegral<5) {
Random r = new Random();
int comPuter = (int) (Math.random() * 3 + 1);
System.out.println("请输入数字猜拳");
int player = scan.nextInt();
if (player==886){
System.out.println("下次再见咯~");
break;
}
if ((player > 0) & (player < 4)) {
System.out.println("你的选择为:" + player);
if (comPuter != player) {
if ((player - comPuter == -1) | (player - comPuter == 2)) {
plaIntegral += 1;
System.out.println("不错不错,竟然真的赢了!本次游戏,电脑出" + comPuter + "你出" + player);
System.out.println("目前战况为: 电脑:" + comIntegral + " 分" + ",玩家 " + plaIntegral + " 分");
System.out.println("退出游戏请输入886,输入其他数字继续");
System.out.println("----------------------------------------\n");
} else {
comIntegral += 1;
System.out.println("还好我技高一筹,你败了!本次游戏,电脑出" + comPuter + "你出" + player);
System.out.println("目前战况为: 电脑:" + comIntegral + " 分" + ",玩家 " + plaIntegral + " 分");
System.out.println();
System.out.println("退出游戏请输入886,输入其他数字继续");
System.out.println("----------------------------------------\n");
}
}else if (comPuter == player) {
System.out.println("真是太有默契了,电脑出 " + comPuter + "你出" + player);
System.out.println("目前战况为: 电脑:" + comIntegral + " 分" + ",玩家 " + plaIntegral + " 分");
System.out.println("退出游戏请输入886,输入其他数字继续");
System.out.println("----------------------------------------\n");
}
}
else {
System.out.println("你输入的数字不合法,重新输入吧~");
System.out.println();
System.out.println("----------------------------------------\n");
}
}
}
}