用python写:idioms文件里每行有一个成语,把它存入以首字为键的字典,用这个字典来写成语接龙游戏,有人机对战和机机对战两种,每次对战由电脑给出第一个完整的成语,在一轮游戏中不可以出现重复的成语
时间: 2024-02-05 11:12:48 浏览: 134
用python实现词语接龙游戏的代码及词库文件
中,我们返回一个新的迭代器对象,该对象被初始化为访问集合中的第一个元素。
### 9. 策略模式
策略模式是一种行为型设计模式,它允许你在运行以下是代码实现:
```
import random
# 读取成语文件,将每个成语以首字为键时更改算法或策略。
以下是Java代码实现:
```java
public interface Strategy {
int execute(int a存入字典
idioms_dict = {}
with open('idioms.txt', 'r', encoding='utf-8') as f:
, int b);
}
public class AddStrategy implements Strategy {
@Override
public int execute(int a, int b) {
for line in f:
idiom = line.strip()
first_char = idiom[0]
if first_char not in idi return a + b;
}
}
public class SubtractStrategy implements Strategy {
@Override
public int execute(int a, int boms_dict:
idioms_dict[first_char] = []
idioms_dict[first_char].append(idiom)
# 游戏函数
def) {
return a - b;
}
}
public class Calculator {
private Strategy strategy;
public Calculator(Strategy strategy) play_game(mode):
used_idioms = [] # 已使用的成语列表
if mode == 'man_vs_computer':
{
this.strategy = strategy;
}
public int execute(int a, int b) {
return strategy.execute(a, b print('开始人机对战成语接龙游戏!')
computer_idiom = random.choice(idioms_dict[random.choice(list);
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
```
在这个(idioms_dict.keys()))]) # 随机选择一个成语作为电脑出题
print('电脑出题:例子中,我们定义了一个 `Strategy` 接口以及两个具体的策略类 `AddStrategy` 和 `', computer_idiom)
used_idioms.append(computer_idiom)
while True:
player_idiom = input('请输入一个成SubtractStrategy`。我们还定义了一个 `Calculator` 计算器类,它包含一个 `Strategy` 对象,并提语:')
if player_idiom in used_idioms:
print('该成语已经使用过,请重新输入!')
供了 `execute()` 方法用于执行计算。在运行时,我们可以通过调用 `setStrategy()` 方法来更 continue
if player_idiom[0] != computer_idiom[-1]:
print('你输入的成语不符合规改计算策略。
### 10. 模板方法模式
模板方法模式是一种行为型设计模则,请重新输入!')
continue
if player_idiom not in idioms_dict[player_idiom[0]]:
print('你输入的成语不在词库中,请重新输入!')
continue
used_idioms.append(player_idiom)
computer_id式,它允许你定义一个操作的算法骨架,而将一些步骤延迟到子类中实现。
以下是Java代码实现:
```java
public abstract class AbstractClass {
= random.choice(idioms_dict[player_idiom[-1 void templateMethod() {
System.out.println print('电脑出题:', computer_idiom)
used_id("AbstractClass templateMethod start.");
primitiveOperation1();
primitiveOperation2();
System.out.println("AbstractClass templateMethod end.");
ioms.append(computer_idiom)
elif mode == 'computer_vs_computer':
print('开始机机对战成语接龙 }
protected abstract void primitiveOperation1();
protected abstract void primitiveOperation2();
}
public class ConcreteClass extends AbstractClass游戏!')
computer1_idiom = random.choice(idioms_dict[random.choice(list(idioms_dict.keys()))])
print('电脑 {
@Override
protected void primitiveOperation1() {
System.out.println("ConcreteClass primitiveOperation1.");
}
1出题:', computer1_idiom)
used_idioms.append(computer1_idiom)
while True:
computer2_id @Override
protected void primitiveOperation2() {
System.out.println("ConcreteClass primitiveOperation2.");
}
}
```
在iom = random.choice(idioms_dict[computer1_idiom[-1]])
if computer2_idiom in used_idioms:
continue
这个例子中,我们定义了一个抽象类 `AbstractClass`,其中的 `templateMethod()` 方法包含了一 print('电脑2出题:', computer2_idiom)
used_idioms.append(computer2_idiom)
computer1些算法步骤,并将一些具体的实现延迟到子类中。我们还定义了一个具体的_idiom = random.choice(idioms_dict[computer2_idiom[-1]])
if computer1_idiom in used_idioms:
continue子类 `ConcreteClass`,它实现了 `primitiveOperation1()` 和 `primitiveOperation2()` 方法。
以上就是这几
print('电脑1出题:', computer1_idiom)
used_idioms.append(computer1_idiom)
else个设计模式的Java代码实现以及详细解说。希望对你有所帮助!
阅读全文