用java写一个不需要数据库的,有用户登陆界面,输入账号密码可以直接登录的飞翔小鸟游戏
时间: 2024-03-11 20:50:14 浏览: 68
好的,我可以为您提供一个简单的示例代码,但需要注意的是,这个游戏不需要数据库,但是需要文件存储来保存用户信息和分数、游戏状态等信息。
代码如下:
```java
import java.util.Scanner;
import java.io.*;
public class FlappyBirdWithLogin {
private static String userFileName = "users.txt"; // 用于保存用户信息的文件名
private static String scoreFileName = "scores.txt"; // 用于保存分数的文件名
private static String currentUser = null; // 当前用户
private static int score = 0; // 分数
private static int highScore = 0; // 最高分数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎来到飞翔小鸟游戏!");
// 读取用户信息
try {
File file = new File(userFileName);
if (file.exists()) {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
while (line != null) {
String[] fields = line.split(",");
String username = fields[0];
String password = fields[1];
User.addUser(username, password);
line = reader.readLine();
}
reader.close();
} else {
file.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
// 读取最高分数
try {
File file = new File(scoreFileName);
if (file.exists()) {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
if (line != null) {
highScore = Integer.parseInt(line);
}
reader.close();
} else {
file.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
if (currentUser == null) {
System.out.println("请选择操作:");
System.out.println("1. 登录");
System.out.println("2. 注册");
System.out.println("3. 查看最高分数");
System.out.println("4. 退出游戏");
int choice = scanner.nextInt();
switch (choice) {
case 1:
login();
break;
case 2:
register();
break;
case 3:
System.out.println("最高分数是:" + highScore);
break;
case 4:
// 保存最高分数
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(scoreFileName));
writer.write(String.valueOf(highScore));
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("谢谢游玩!");
return;
default:
System.out.println("无效操作!");
break;
}
} else {
System.out.println("当前用户:" + currentUser);
System.out.println("请选择操作:");
System.out.println("1. 开始游戏");
System.out.println("2. 查看个人最高分数");
System.out.println("3. 退出登录");
int choice = scanner.nextInt();
switch (choice) {
case 1:
startGame();
break;
case 2:
System.out.println("个人最高分数是:" + User.getUserHighScore(currentUser));
break;
case 3:
currentUser = null;
break;
default:
System.out.println("无效操作!");
break;
}
}
}
}
private static void login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
if (User.login(username, password)) {
currentUser = username;
System.out.println("登录成功!");
} else {
System.out.println("用户名或密码错误!");
}
}
private static void register() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
if (User.addUser(username, password)) {
System.out.println("注册成功!");
} else {
System.out.println("用户名已存在!");
}
}
private static void startGame() {
score = 0;
System.out.println("游戏开始!");
while (true) {
System.out.println("按下空格键跳跃,其他键退出游戏");
int ch = getch();
if (ch == 32) {
System.out.println("小鸟跳跃!");
score++;
if (score > highScore) {
highScore = score;
User.setUserHighScore(currentUser, score);
}
} else {
System.out.println("游戏结束,得分:" + score);
User.setUserHighScore(currentUser, score);
return;
}
}
}
private static int getch() {
try {
if (System.console() != null) {
return System.console().reader().read();
} else {
return System.in.read();
}
} catch (IOException e) {
return -1;
}
}
// 用户类,用于管理用户信息和个人最高分数
private static class User {
private static final String DELIMITER = ",";
private static final String[] users = new String[100];
private static final int[] highScores = new int[100];
private static int count = 0;
public static boolean addUser(String username, String password) {
for (int i = 0; i < count; i++) {
if (users[i].equals(username)) {
return false;
}
}
users[count] = username;
highScores[count] = 0;
count++;
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(userFileName, true));
writer.write(username + DELIMITER + password);
writer.newLine();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
public static boolean login(String username, String password) {
for (int i = 0; i < count; i++) {
if (users[i].equals(username) && password != null && password.equals(users[i + 1])) {
return true;
}
}
return false;
}
public static int getUserHighScore(String username) {
for (int i = 0; i < count; i++) {
if (users[i].equals(username)) {
return highScores[i];
}
}
return 0;
}
public static void setUserHighScore(String username, int score) {
for (int i = 0; i < count; i++) {
if (users[i].equals(username)) {
highScores[i] = score;
return;
}
}
}
}
}
```
这个游戏使用了文件存储来保存用户信息和分数、游戏状态等信息,文件名分别为“users.txt”和“scores.txt”。在游戏开始前,程序会读取这两个文件来获取用户信息和最高分数。在游戏结束后,程序会将当前分数与最高分数进行比较,如果当前分数更高,则更新最高分数并保存到文件中。
这个游戏还实现了用户注册、登录和个人最高分数的功能。用户信息保存在一个静态的内部类User中,用于管理用户信息和个人最高分数。在用户登录后,程序会记录当前用户,以便后续操作时使用。
这个游戏只是一个简单的示例,您可以根据自己的需求进行修改和扩展。
阅读全文