简单UDP/TCP java Hangman
我的任务是使用UDP/TCP连接编写简单的游戏。我已经有了一个关于java的简单的刽子手游戏。我想在2个客户端或服务器客户端之间玩这个游戏。这是我的刽子手密码简单UDP/TCP java Hangman,java,sockets,networking,tcp,udp,Java,Sockets,Networking,Tcp,Udp,我的任务是使用UDP/TCP连接编写简单的游戏。我已经有了一个关于java的简单的刽子手游戏。我想在2个客户端或服务器客户端之间玩这个游戏。这是我的刽子手密码 package gameexample; import java.util.Arrays; import java.util.Scanner; public class Hangman{ public static void main(String[] args) { String[] words = {"writer", "t
package gameexample;
import java.util.Arrays;
import java.util.Scanner;
public class Hangman{
public static void main(String[] args) {
String[] words = {"writer", "that", "program"};
// Pick random index of words array
int randomWordNumber = (int) (Math.random() * words.length);
// Create an array to store already entered letters
char[] enteredLetters = new char[words[randomWordNumber].length()];
int triesCount = 0;
boolean wordIsGuessed = false;
do {
// infinitely iterate through cycle as long as enterLetter returns true
// if enterLetter returns false that means user guessed all the letters
// in the word e. g. no asterisks were printed by printWord
switch (enterLetter(words[randomWordNumber], enteredLetters)) {
case 0:
triesCount++;
break;
case 1:
triesCount++;
break;
case 2:
break;
case 3:
wordIsGuessed = true;
break;
}
} while (! wordIsGuessed);
System.out.println("\nThe word is " + words[randomWordNumber] +
" You missed " + (triesCount -findEmptyPosition(enteredLetters)) +
" time(s)");
}
public static int enterLetter(String word, char[] enteredLetters) {
System.out.print("(Guess) Enter a letter in word ");
// If-clause is true if no asterisks were printed so
// word is successfully guessed
if (! printWord(word, enteredLetters))
return 3;
System.out.print(" > ");
Scanner input = new Scanner(System.in);
int emptyPosition = findEmptyPosition(enteredLetters);
char userInput = input.nextLine().charAt(0);
if (inEnteredLetters(userInput, enteredLetters)) {
System.out.println(userInput + " is already in the word");
return 2;
}
else if (word.contains(String.valueOf(userInput))) {
enteredLetters[emptyPosition] = userInput;
return 1;
}
else {
System.out.println(userInput + " is not in the word");
return 0;
}
}
asterisks were printed, otherwise return false */
public static boolean printWord(String word, char[] enteredLetters) {
// Iterate through all letters in word
boolean asteriskPrinted = false;
for (int i = 0; i < word.length(); i++) {
char letter = word.charAt(i);
// Check if letter already have been entered bu user before
if (inEnteredLetters(letter, enteredLetters))
System.out.print(letter); // If yes - print it
else {
System.out.print('*');
asteriskPrinted = true;
}
}
return asteriskPrinted;
}
public static boolean inEnteredLetters(char letter, char[] enteredLetters) {
return new String(enteredLetters).contains(String.valueOf(letter));
}
public static int findEmptyPosition(char[] enteredLetters) {
int i = 0;
while (enteredLetters[i] != '\u0000') i++;
return i;
}
}
package示例;
导入java.util.array;
导入java.util.Scanner;
公共级刽子手{
公共静态void main(字符串[]args){
String[]words={“writer”、“that”、“program”};
//选取单词数组的随机索引
int randomWordNumber=(int)(Math.random()*words.length);
//创建数组以存储已输入的字母
char[]enteredLetters=新字符[words[randomWordNumber].length()];
int-triesunt=0;
boolean wordIsGuessed=false;
做{
//只要enterLetter返回true,就可以无限循环
//如果enterLetter返回false,则表示用户猜测了所有字母
//例如,在word中,printWord没有打印任何星号
开关(输入字母(单词[randomWordNumber],输入字母)){
案例0:
triesCount++;
打破
案例1:
triesCount++;
打破
案例2:
打破
案例3:
wordIsGuessed=true;
打破
}
}而(!wordIsGuessed);
System.out.println(“\n单词为”+单词[randomWordNumber]+
“您错过了”+(triesCount-findEmptyPosition(输入字母))+
"时间";;
}
public static int enteredLetter(字符串字,字符[]enteredLetters){
System.out.print(“(猜测)在word中输入字母”);
//如果没有打印星号,则If子句为true
//单词猜对了
如果(!打印字(字,输入字母))
返回3;
系统输出打印(“>”);
扫描仪输入=新扫描仪(System.in);
int emptyPosition=findemptposition(输入字母);
char userInput=input.nextLine().charAt(0);
if(输入者(用户输入,输入字母)){
System.out.println(userInput+“已在word中”);
返回2;
}
else if(word.contains(String.valueOf(userInput))){
enteredLetters[emptyPosition]=用户输入;
返回1;
}
否则{
System.out.println(userInput+“不在单词中”);
返回0;
}
}
已打印星号,否则返回false*/
公共静态布尔打印字(字符串字,字符[]输入字母){
//遍历word中的所有字母
布尔星号打印=假;
for(int i=0;i
有谁能告诉我如何将这段代码写入客户机-服务器程序,让两名玩家轮流等待每次猜测?当其中一人猜到最后一个字母时,游戏就结束了。嗯。。。问题是什么?网络方面的小提示:UDP是一种无连接协议。谢谢,编辑。我知道,但我有点不知道在这里使用什么是最好的。TCP有点浪费资源,因为您只需要小数据报。另一方面,您可能需要声明UDP不提供的可靠性级别。个人Id只是通过UDP实现一个ACK系统。至于其余的,您只需要提供三种类型的消息:初始字符串、角色选择和游戏结束,以及可选的ACK(如果您认为有必要)。“有人能告诉我如何编写此代码吗”-将程序编写(或转换)为客户机/服务器并不是一项小任务,当然太大了,不能用一个简单的答案来回答。@paul那么基本上我用UDP?