c语言实现金山打字游戏,运用结构体,文件,链表等知识
时间: 2023-08-15 11:10:42 浏览: 100
下面是一个简单的实现金山打字游戏的c语言代码,其中运用了结构体、文件、链表等知识。
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define WORDS_FILE "words.txt" // 单词文件路径
#define MAX_WORD_LEN 20 // 单词最大长度
#define MAX_TRIES 5 // 最大错误次数
// 单词结构体
typedef struct word {
char content[MAX_WORD_LEN + 1]; // 单词内容
struct word *next; // 指向下一个单词的指针
} Word;
// 读取单词文件并返回单词链表头指针
Word* read_words() {
FILE *fp = fopen(WORDS_FILE, "r");
if (fp == NULL) {
printf("Failed to open words file.\n");
exit(1);
}
char line[MAX_WORD_LEN + 1];
Word *head = NULL;
Word *tail = NULL;
while (fgets(line, MAX_WORD_LEN + 1, fp) != NULL) {
line[strcspn(line, "\r\n")] = '\0'; // 去掉换行符
Word *word = (Word*)malloc(sizeof(Word));
strcpy(word->content, line);
word->next = NULL;
if (head == NULL) {
head = word;
tail = word;
} else {
tail->next = word;
tail = word;
}
}
fclose(fp);
return head;
}
// 从单词链表中随机选择一个单词
char* select_word(Word *head) {
int len = 0;
for (Word *p = head; p != NULL; p = p->next) {
len++;
}
if (len == 0) {
return NULL;
}
int index = rand() % len;
Word *p = head;
while (index-- > 0) {
p = p->next;
}
return p->content;
}
// 显示游戏画面
void display_game(int tries, char *hidden) {
printf("Tries left: %d\n", tries);
printf("Word: %s\n", hidden);
}
int main() {
srand((unsigned)time(NULL)); // 初始化随机数生成器
Word *word_list = read_words(); // 读取单词文件并生成单词链表
char *word_to_guess = select_word(word_list); // 从单词链表中随机选择一个单词
int len = strlen(word_to_guess);
char hidden[len + 1]; // 隐藏单词
memset(hidden, '_', len);
hidden[len] = '\0';
int tries = MAX_TRIES;
while (tries > 0) {
display_game(tries, hidden);
char guess;
printf("Guess a letter: ");
scanf(" %c", &guess);
int found = 0;
for (int i = 0; i < len; i++) {
if (word_to_guess[i] == guess && hidden[i] == '_') {
hidden[i] = word_to_guess[i];
found = 1;
}
}
if (!found) {
tries--;
}
if (strcmp(hidden, word_to_guess) == 0) {
printf("Congratulations! You guessed the word: %s\n", word_to_guess);
break;
}
}
if (tries == 0) {
printf("Game over! The word was: %s\n", word_to_guess);
}
return 0;
}
```
该代码首先定义了一个单词结构体,包含单词内容和指向下一个单词的指针。然后实现了三个函数:
- `read_words`:从单词文件中读取单词,并生成单词链表。
- `select_word`:从单词链表中随机选择一个单词。
- `display_game`:显示游戏画面。
最后,在 `main` 函数中实现了游戏的逻辑,包括隐藏单词、输入字母、判断猜测是否正确等。如果猜测正确,则输出恭喜信息;如果猜测次数用完,输出游戏结束信息。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![ppt](https://img-home.csdnimg.cn/images/20241231044937.png)
![](https://img-home.csdnimg.cn/images/20250102104920.png)
![ppt](https://img-home.csdnimg.cn/images/20241231044937.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)