java编程实现;猜单词游戏

题目:

算法原理:创建一个words数组,模拟一个单词池,创建一个status数组,把它初始化为一个一个的"",status的数组的长度即是随机出来的单词的长度,用户传入一个字母,用iscontain方法(遍历)判断它是否在随机出来的那个单词里面,若在,且状态为“”,就用setstatus将对应位置的"*"变成对应的字母,若状态为字母,则说明already in the word。如果iscontain方法遍历出来没有,则not in the word。

代码如下:

import java.util.Random;
import java.util.Scanner;
public class guessNumber {
***

## //变量区

***
	 //下面是在定义全局变量,一般到处都会使用到的变量就定义为全局变量
	public static Random r;
	public static String[] words= {"write","that","operation","loving","program","exit","watermelon","insert","cafeteria"};
	public static String s;
	public static String[] status;
	public static int missednum;
	public static boolean flag;
	public static void main(String[] args) {
		r=new Random();
		s=words[r.nextInt(words.length)];
		status=new String[s.length()];
		missednum=0;
		//上面是在为全局变量赋初值
		init();//将状态数组status初始化为全"*"
		
## ***//游戏逻辑***	
		outer://下一轮游戏的标记
		while(true) {
			Scanner sc=new Scanner(System.in);
            print();//打印提示用户输入的提示语句,主要是对于status的遍历打印
			String c=sc.nextLine();
			iscontain(c);//判断用户输入的字母是否在随机单词s中
			
			flag=true;//标记循环出来的时候的状态
			for(int j=0;j<status.length;j++) {
				if(status[j]=="*") {
				flag=false;
				}
			}
			//上面是在判断status是否全成为了字母,若全成了字母,则一轮游戏结束
			

## ***//开启下一轮逻辑***

			if(flag==true) {//flag==true,说明全为字母,本轮游戏结束
				System.out.println("The word is "+s+". You missed "+missednum+" time");	
				System.out.print("Do you want to guess another word? Enter y or n >");//提示用户是否开启下一轮猜字游戏
				String str=sc.nextLine();//读取用户的需求
				
				if(str.equals("y")) {//判断用户的需求
					s=words[r.nextInt(words.length)];
					status=new String[s.length()];
					missednum=0;
					//新一轮游戏开始了,需要重新随机单词,错误次数也要重置
					init();//状态数组也要初始化为新单词的长度,并全变成"*"
					
					continue outer;//继续下次循环,开启下一轮游戏
				}else {
					break;
				}
				//如果用户不玩了,则跳出循环
			}
		}
	}
	
***

## //方法区

***
	public static void print() {
		System.out.print("(Guess) Enter a letter in word ");
		for(int i=0;i<status.length;i++) {
			System.out.print(status[i]);
		}
		System.out.print(" > ");	
	}
	public static void init() {
		for(int i=0;i<=s.length()-1;i++) {
			status[i]="*";
		}	
	}
	public static void iscontain(String c) {
		flag=false;//标记下面循环出来时的状态
		for(int i=0;i<s.length();i++) {//遍历随机单词s
			String str=s.charAt(i)+"";//取出s中的char型字符,变String
			if(c.equals(str)) {
				flag=true;
				setStatus(i);//相等,就把status数组里"*"变i位置对应的字符
			}
		}
		if(flag==false) {//flag==false,说明s遍历完里面都没有一个c
			missednum++;//记录猜错的次数
			System.out.println(c+" is not in the word!");//用户输入的c未在其中
		}
	}
	public static void setStatus(int k) {
		if(status[k].equals("*")) {
			status[k]=s.charAt(k)+"";
		}else {//如果不是"*",则说明用户输入的字母在之前用户就已经输过了
			System.out.println(s.charAt(k)+" is already in the word!");
		}
	}
}

你可能感兴趣的:(javaSE)