猜东西游戏
猜字母游戏规则
字母对了位置不对记为B,有多少个对的是多少个B
字母对了位置也对了记为A,有多少个对的是多少个A
如:
GXYQC
猜:CQYAC
2A2B
猜:GXAAG
2A1B
猜:QQQQQ
1A4B
猜:GXYQC
5A0B
import java.util.Scanner;
public abstract class GuessGame {
static Scanner sc=new Scanner(System.in);
/*
* 猜数字和猜字母两种游戏的
* 通用游戏流程
*/
public void start(){
//产生随机值(通用代码中不同部分就调用方法)
String r=suiJi();
System.out.println("作弊"+r);
//显示提示
tiShi();
//死循环
while(true){
System.out.print("猜:");
String c=sc.nextLine();
//比较c和r,并得到比较结果
String result=biJiao(c,r);
System.out.println(result);
if("-1".equals(c))
break;
//判断是否是才对的结果
if(caiDui(result)){
break;
}
}
sc.close();
}
public abstract String suiJi();
public abstract void tiShi();
public abstract String biJiao(String c, String r);
public abstract boolean caiDui(String result);
}
import java.util.Random;
public class GuessNumberGame extends GuessGame {
@Override
public String suiJi() {
int r=1+new Random().nextInt(1000);
//数字作为字符串返回
return String.valueOf(r);
}
@Override
public void tiShi() {
System.out.println("已经产生了一个[1,1000]范围内的随机整数");
System.out.println("猜猜这个数字是几?");
}
@Override
public String biJiao(String c, String r) {
//字符串转成int整数
int cc=Integer.parseInt(c);
int rr=Integer.parseInt(r);
return cc>rr?"大":(cc<rr?"小":"对");
}
@Override
public boolean caiDui(String result) {
return "对".equals(result);
}
}
import java.util.Random;
public class GuessLetterGame extends GuessGame{
@Override
public String suiJi() {
/**
* *)StringBuilder表示A-Z
* *)随机交换5个到前5个位置
* j
* ABCEDFGHJKLMNOPQRSTUVWXYZ
* i
* j
* TBCEDFGHJKLMNOPQRSAUVWXYZ
* i
* j
* THCEDFGBJKLMNOPQRSAUVWXYZ
* i
* .....
* *)截取前5个字符
*/
StringBuilder sb = new StringBuilder("ABCEDFGHJKLMNOPQRSTUVWXYZ");
//访问前5个位置
for (int i = 0; i < 5; i++) {
int j=new Random().nextInt(26);
char t=sb.charAt(i);
sb.setCharAt(i, sb.charAt(j));
sb.setCharAt(j, t);
}
String s=sb.substring(0,5);
return s;
}
@Override
public void tiShi() {
System.out.println("已经产生了5个不重复的大写字母");
System.out.println("猜猜这5个字母");
}
@Override
public String biJiao(String c, String r) {
/**
* r BWGPJ
* j++
*
* c BSEFW
* i++
* A B
*
*/
int a=0,b=0;
for (int i = 0; i < c.length(); i++) {
for(int j=0;j<r.length();j++)
{
//i位置字符和j位置字符相等 char类型是基本类型
if(c.charAt(i)==r.charAt(j)){
if(i==j){
a++;//位置相等
}
else{
b++;//位置不相等
}
//j位置找到相同字符,就不必再向后找
break;
}
}
}
return a+"A"+b+"B";
}
@Override
public boolean caiDui(String result) {
return "5A0B".equals(result);
}
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("1.猜数字");
System.out.println("2.猜字母");
System.out.println("选择");
Scanner sc = new Scanner(System.in);
int c=sc.nextInt();
GuessGame g=null;
switch (c) {
case 1:
g=new GuessNumberGame();
break;
case 2:
g=new GuessLetterGame();
break;
}
g.start();
sc.close();
}
}