import java.util.Random;
import java.util.Scanner;
import java.util.regex.Pattern;
public class DartGame
{
private int dartsNumber;
public Player player;
public DartGame()
{
dartsNumber=0;
}
public DartGame(int dartsNumber) {
this.dartsNumber = dartsNumber;
}
public int getDartsNumber() {
return dartsNumber;
}
public void setDartsNumber(int dartsNumber) {
this.dartsNumber = dartsNumber;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
DartGame game1 = new DartGame();
Player player = new Player();
game1.displayWelcomeMessage();
String name = game1.inputUserName();
System.out.println("your name is "+name);
//put the name into the class of player
player.setName(name);
System.out.println("getName========"+player.getName());
//call the method of inputDartsNumber
int dartNum = game1.inputDartsNumber();
System.out.println("your input number of dart = "+dartNum);
//
game1.setDartsNumber(dartNum);
while (true){
System.out.println("Do you want to start the game? please enter Yes to Start or No to quit the game");
String isStart = scanner.nextLine();
//The equalsIgnoreCase() method is used to compare the string with the specified object, regardless of case.
if(isStart.equalsIgnoreCase("Yes") )
{
System.out.println("Welcome to the Darts Game!");
//initialize field
player.setPlayerScore(0);
player.setVaderScore(0);
boolean isContinue = game1.playGame();
if(isContinue==false)
{
System.out.println("Bye bye");
break;
}
else if(isContinue ==true)
{
continue;
}
}
else if(isStart.equalsIgnoreCase("No"))
{
System.out.println("Bye bye");
break;
}
else
{
System.out.println("Invalid input, please enter agian");
}
}
}
public void displayWelcomeMessage()
{
System.out.println("Welcome to the Game!");
}
public String inputUserName()
{
Scanner scanner = new Scanner(System.in);
while(true)
{
System.out.print("Please enter your name: ");
String yourName = scanner.nextLine();
if(isSmall(yourName) && yourName.length()<=8)
{
System.out.println("input correctly");
return yourName;
}
else
{
System.out.println("Please enter no more than eight lowercase letters,please enter agian");
}
}
}
public int inputDartsNumber()
{
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("Please enter the number of darts you need,the number of darts must between 1 and 5.\nplease enter here:");
String darts =scanner.nextLine();
//Used to determine whether the character is a number
//*******
if(isDigits(darts) && darts.length()!=0)
{
int dartNumber = Integer.parseInt(darts);
if(0<dartNumber && dartNumber<=5)
{
return dartNumber;
}
else
{
System.out.println("Invalid input,You can only have 1 to 5 darts");
}
}
else
{
System.out.println("Invalid input,You can only have 1 to 5 darts");
}
}
}
public boolean isSmall(String name)
{
Pattern pattern = Pattern.compile("[a-z]*");
return pattern.matcher(name).matches();
}
public boolean isDigits(String darts)
{
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(darts).matches();
}
public void calculateScore(int score,String identity)
{
if(identity.equalsIgnoreCase("player"))
{
int totalPlayerScore = player.getPlayerScore()+score;
player.setPlayerScore(totalPlayerScore);
}
else if(identity.equalsIgnoreCase("vader"))
{
int totalVaderScore = player.getVaderScore()+score;
player.setVaderScore(totalVaderScore);
}
}
public void displayResultOfDartThrow(int dartNumber, int score)
{
}
public String displayGameResult(int playerScore,int dartScore)
{
if(playerScore>dartScore)
{
return "player winning";
}
else if (playerScore<dartScore)
{
return "Vader winning";
}
else if(playerScore==-1)
{
return "Vader winning";
}
else if(dartScore== -1)
{
return "player winning";
}
else {
return "draw";
}
}
public boolean playGame()
{
Scanner scanner = new Scanner(System.in);
Random random = new Random();
DartThrow dartThrow = new DartThrow();
int dartsThrown = 1;
while (true && dartsThrown<(getDartsNumber()+1)) {
// human player's turn
System.out.println("Your turn to throw. Type 'quit' to abandon the game.");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("quit"))
{
System.out.println("You abandoned the game.");
System.out.println("the result of the game is "+displayGameResult(-1,0));
return true;
}
double playerBoard = dartThrow.generateRandomNumber(100);
if (playerBoard < (Math.PI / 4*100)) {
// dart lands on the board
dartsThrown++;
double playerThrow = dartThrow.generateRandomNumber(100);
if (playerThrow < 4) {
// dart lands in black area
System.out.println("You got 5 points!");
calculateScore(5,"player");
System.out.println("your current total score = " + player.getPlayerScore());
} else if (playerThrow < 16) {
// dart lands in yellow area
System.out.println("You got 2 points!");
calculateScore(2,"player");
System.out.println("your current total score = " + player.getPlayerScore());
} else {
// dart lands in blue area
System.out.println("You got 1 point!");
calculateScore(1,"player");
System.out.println("your current total score = " + player.getPlayerScore());
}
} else {
// dart misses the board
dartsThrown++;
System.out.println("You missed the board. Zero points scored.");
System.out.println("your current total score = " + player.getPlayerScore());
}
// Dart Vader's turn
if (dartThrow.generateRandomNumber(100) < 5) {
// Dart Vader abandons the game
System.out.println("Dart Vader abandoned the game.");
System.out.println("the result of the game is "+displayGameResult(0,-1));
return true;
}
double VaderBoard = dartThrow.generateRandomNumber(100);
if (VaderBoard < (Math.PI / 4*100)) {
// dart lands on the board
double VaderThrow= dartThrow.generateRandomNumber(100);
if (VaderThrow < 4) {
// dart lands in black area
System.out.println("Dart Vader got 5 points.");
calculateScore(5,"vader");
System.out.println("Dart Vader's current total score = " + player.getVaderScore());
} else if (VaderThrow < 16) {
// dart lands in yellow area
System.out.println("Dart Vader got 2 points.");
calculateScore(2,"vader");
System.out.println("Dart Vader's current total score = " + player.getVaderScore());
} else {
// dart lands in blue area
System.out.println("Dart Vader got 1 point.");
calculateScore(1,"vader");
System.out.println("Dart Vader's current total score = " + player.getVaderScore());
}
} else {
// dart misses the board
System.out.println("Dart Vader missed the board. Zero points scored.");
System.out.println("Dart Vader's current total score = " + player.getVaderScore());
}
}
System.out.println("!!!!!!Game over!!!!!!");
System.out.println("Your score: " + player.getPlayerScore());
System.out.println("Dart Vader's score: " + player.getVaderScore());
System.out.println("the result of the game is "+displayGameResult(player.getPlayerScore(),player.getVaderScore()));
return true;
}
}
Java 非主函数调用其他类的方法,对象报错为null,如果我在其他方法下面再new Player对象,那么
就会被回收,get不到值。
报错信息如下:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Player.getPlayerScore()" because "this.player" is null
at DartGame.calculateScore(DartGame.java:152)
at DartGame.playGame(DartGame.java:227)
at DartGame.main(DartGame.java:57)