在 C 语言编程学习过程中,通过实际项目来巩固和提升技能是非常有效的方式。今天我们就来深入探讨如何用 C 语言开发一个单词搜索游戏,这个游戏不仅能锻炼编程能力,还充满趣味性。
一、项目需求剖析
单词搜索游戏是一种常见的文字游戏,玩家需要在一个字母网格中找出隐藏的单词,这些单词可以水平、垂直或对角排列。具体功能如下:
- 单词搜索谜题生成:存储特定主题(如动物、颜色、行星等,这里我们以动物、水果、体育活动为例)的单词列表;生成一个20x20 大小的二维字母网格,且网格中包含 7 个所选类别的单词;单词在网格中随机放置,水平放置概率为 40%,垂直放置概率为 40%,对角放置概率为 20%(对角单词可升序或降序);保证单词之间不会相互覆盖。
- 单词搜索游戏:程序启动时欢迎玩家并获取玩家姓名;展示可供选择的单词类别;玩家输入在网格中看到的单词,猜对的单词在网格中被移除;设置 2 分钟的时间限制,时间结束或玩家找出所有单词时给出相应提示。
二、代码实现详解
(一)准备工作
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <curses.h>
char **create2DArray(void);
char** createMaskArray(void);
void printArray(char** array);
void insertHorizontally(char* word, char** array, char** maskArray);
void insertVertically(char* word, char** array, char** maskArray);
void insertDiagonally(char* word, char** array, char** maskArray);
#define WIDTH 20
#define HEIGHT 20
char** myArray;
char** maskArray;
int Row, Col, Sequence;
clock_t start, end1;
double duration1;
在这段代码中,我们包含了多个头文件,这些头文件提供了程序所需的各种函数和定义。create2DArray
、createMaskArray
等函数用于创建二维数组和掩码数组;printArray
用于打印二维数组;insertHorizontally
、insertVertically
和insertDiagonally
分别用于在二维数组中水平、垂直和对角插入单词。通过#define
定义了二维数组的宽度和高度,还声明了一些全局变量,用于记录数组、插入位置和游戏时间等信息。
(二)主函数逻辑
int main(void) {
int i;
printf("\n\n---------------------------------\n");
printf("| |\n");
printf("| Welcome to Word Search 3000 |\n");
printf("| |\n");
printf("-------------------------------\n\n");
printf("What is your name? ");
char name[10];
scanf("%s", name);
printf("\nHi %s! What category would you like?", name);
printf("\n\n-----------------");
printf("\n1. Animals\n2. Fruit\n3. Physical_activity\n");
printf("-------------------\n\n");
srand((unsigned)time(NULL));
myArray = create2DArray();
maskArray = createMaskArray();
char *animals[] = {"LION", "FISH", "RABBIT", "CAT", "ANT", "SNAKE", "KANGAROO"};
char *fruit[] = {"", "APPLE", "GRAPE", "ORANGE", "BANANA", "WATERMELON", "MANGO", "PEAR"};
char *physical_activity[] = {"", "FOOTBALL", "SWIM", "RUN", "SHOOT", "VOLLEYBALL", "BICYCLE", "BADMINTON"};
printf("Category: ");
char category[20];
scanf("%s", category);
printf("\nOK %s - There are 7 %s hidden in this grid.\n", na