Java面向对象思想解决猜拳问题
第一个面向对象的程序:
一个控制台猜拳小游戏:
第一步选择角色;
第二部选择剪刀,石头,布,与电脑进行PK;
第三部选择继续或者选择结束;
结束显示比赛的局数,以及各自赢得的分数;
设计思路
分析问题,设计出四个类
1.设计Person,Computer,Game三个类;
2.设计Test类启动程序;
测试运行:
-----------欢迎进入游戏世界----------- ****************** ******猜拳开始***** ****************** ---------------------------------------- 出拳规则:1.剪刀 2.石头 3.布 请选择角色:(1.刘备 2.孙权 3.曹操): 你选择 曹操对战 输入y开始: y 请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:) 你出拳: 剪刀 电脑出拳:剪刀 和局,再来一局吧 是否开始下一轮(y/n):y 请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:) 你出拳: 石头 电脑出拳:布 你输了,真笨! 是否开始下一轮(y/n):y 请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:) 你出拳: 布 电脑出拳:布 和局,再来一局吧 是否开始下一轮(y/n):n 你选的是:曹操 你共战局数:3 你共得: 0分 电脑共得了: 1分 你赢了 0局 你输了 1局 和局 2局 你第1局出的: 剪刀 电脑出的: 剪刀 你第2局出的: 石头 电脑出的: 布 你第3局出的: 布 电脑出的: 布
Person 类:
package com.tt; import java.util.*; public class Person { Scanner input = new Scanner(System.in); public static int score = 0; public int showSelect() { while (true) { System.out.print("请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:)\n"); int num = input.nextInt(); switch (num) { case 1: System.out.println("你出拳: 剪刀"); return 1; case 2: System.out.println("你出拳: 石头"); return 2; case 3: System.out.println("你出拳: 布"); return 3; default: System.out.println("输入有误,请重新输入\n"); continue;// 输入有误,重新输入 } } } }
Computer 类:
package com.tt; import java.util.*; public class Computer { Scanner input = new Scanner(System.in); public static int score; public int showSelect() { int num = (int) (Math.random() * 3 + 1); switch (num) { case 1: System.out.println("电脑出拳:剪刀"); return 1; case 2: System.out.println("电脑出拳:石头"); return 2; case 3: System.out.println("电脑出拳:布"); return 3; default: return -1; } } }
Game 类:
package com.tt; import java.util.*; public class Game { Scanner input = new Scanner(System.in); private Person person = new Person(); private Computer computer = new Computer(); private static int count = 0;// 记录比赛的次数 private static int win_count = 0; private static int lose_count = 0; private static int peace_count = 0; ArrayList<Integer> list1 = new ArrayList<Integer>();// 记录人每次出的数字 ArrayList<Integer> list2 = new ArrayList<Integer>();// 记录电脑每次出的数字 public String Show() { System.out.println("-----------欢迎进入游戏世界-----------"); System.out .println("\t\t******************\n\t\t******猜拳开始*****\n\t\t******************"); System.out.println("----------------------------------------\n"); System.out.println("出拳规则:1.剪刀 2.石头 3.布"); while (true) { System.out.println("请选择角色:(1.刘备 2.孙权 3.曹操):"); int num = input.nextInt(); switch (num) { case 1: System.out.println("你选择 刘备对战"); return "刘备"; case 2: System.out.println("你选择 孙权对战"); return "孙权"; case 3: System.out.println("你选择 曹操对战"); return "曹操"; default: System.out.println("你输入有误,请重新输入哈"); continue;// 输入有误,重新输入 } } } public void Start(String s) { System.out.println("输入y开始:"); while (true) { String answer = input.next(); if (answer.equals("y")) { int person_select = person.showSelect(); int computer_select = computer.showSelect(); if ((person_select == 1 && computer_select == 1) || (person_select == 2 && computer_select == 2) || (person_select == 3 && computer_select == 3)) { System.out.println("和局,再来一局吧\n"); peace_count++; } else if ((person_select == 1 && computer_select == 3) || (person_select == 2 && computer_select == 1) || (person_select == 3 && computer_select == 2)) { System.out.println(" 恭喜, 你赢了!加油\n"); Person.score++; win_count++; } else { System.out.println("你输了,真笨!\n"); Computer.score++; lose_count++; } list1.add(person_select);// 添加到记录人的数组中 list2.add(computer_select);// 添加到电脑人的数组中 count++; System.out.print("是否开始下一轮(y/n):"); } else { System.out.println("\n你选的是:" + s + " 你共战局数:" + count); System.out.println("你共得: " + Person.score + "分"); System.out.println("电脑共得了: " + Computer.score + "分"); System.out.println("你赢了 " + win_count + "局"); System.out.println("你输了 " + lose_count + "局"); System.out.println("和局 " + peace_count + "局"); // 显示人和电脑每次的对战 for (int i = 0; i < list1.size(); i++) { System.out.println("你第" + (i + 1) + "局出的: " + great(list1.get(i)) + " 电脑出的: " + great(list2.get(i))); } } } } // 用来显示比赛过程 public String great(int num) { switch (num) { case 1: return "剪刀"; case 2: return "石头"; case 3: return "布"; default: return null; } } }
Test 类:
package com.tt; public class Test { public static void main(String[] args) { Game g1 = new Game(); String s = g1.Show(); g1.Start(s); } }
Java面向对象思想解决猜拳问题的更多相关文章
- 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图
面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...
- JAVA面向对象思想理解分析
1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...
- 薪资管理系统(Java面向对象思想)
package com.test3; import java.util.*; import java.io.*; /** * @author qingfeng * 重要思想:面向对象思想(添加员工管理 ...
- java面向对象思想2
1.主函数是一类特殊的函数,作为程序入口,可被虚拟机调用.主函数格式是固定的.public:函数访问权限最大.static:代表函数随着类的加载已经存在.void:主函数没有具体返回值.main:不是 ...
- java面向对象思想1
1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...
- 《Head First Java》读书笔记(2) - Java面向对象思想
1.了解继承 对象继承实际上就是一种"is - a"的关系,如上图的"PantherMan is a SuperHero?",是,那么便属于继承的理解. 继承能 ...
- java面向对象思想之封装
一.什么是封装 菜鸟教程对封装的解释是"在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法.".简单来说就 ...
- JAVA面向对象思想
1.面向对象的基本特征 面向对象具有三个基本特征:封装.多态.继承. 1)封装 封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能. ...
- 浅谈Java面向对象思想
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
随机推荐
- mysql: update字段中带select
update字段中带select UPDATE tb_report_type A INNER JOIN (SELECT LEVEL_CODE FROM tb_report_type WHERE id ...
- 找出一个二维数组中的"鞍点",即该位置上的元素在该行中最大,在该列中最小(也可能没有"鞍点"),打印有关信息.(提示:注意特殊情况:没鞍点或多个鞍点)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { ][] = {}; ;i < ...
- Number()数据类型转换
Number() 如果是 Boolean 值, 和.如果是数字值,只是简单的传入和返回.如果是 .如果是 undefined,返回NaN. 如果是字符串,遵循下列规则: 如果字符串中只包含数字( ...
- LocalDB-排序规则:中文乱码; DefaultLanguage
DefaultLanguage: Set Language 简体中文|us_english SELECT SYSTEM_USER Login SP_DefaultLanguage #Login, 简体 ...
- XAF ListView 移除顶部工具栏
此方法适用于C/S及B/S,无需分别写在web和win中. Module下新建ViewController,代码如下: public partial class GongZuoJiaoShen_Yin ...
- ODBC,OLEDB,ADO,ADO.net,JDBC 理解
一 .ODBC 开放式数据库互联(Open Database connectivity), 93年微软推出的实现应用程序 和关系数据库直接 通讯的借口标准.只能用于关系数据库 . 注意事项 : 必须先 ...
- 【Android UI】Android ListView详解
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...
- vim指令常用
慢慢尝试使用vim,不断学习使用新的快捷键,将常用快捷键但经常容易忘的写下来, 1. 复制黏贴 命令行模式下按住v选中,y表示复制,d表示剪切,p为复制.
- 剑指offer算法_位运算求和
不用+,-,*,/运算求和,可以分成三步: 1.计算两个数字的异或值,相当于只计算每一位的和,不计算进位,得出结果sum: 2.计算两个数字的与值,相当于求出两个数字的进位,然后左移一位,相当于进位, ...
- 编译系统中的LR与LL理解
编译原理:LL(1),LR(0),SLR(1),LALR(1),LR(1)对比 LL(1)定义:一个文法G是LL(1)的,当且仅当对于G的每一个非终结符A的任何两个不同产生式 A→α|β,下面的条件成 ...