#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <Windows.h> //为了调用Windows API,包含这个头文件
//宏定义
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
#define USERINFO_FILENAME "userinfo_snake.dat"
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
//全局变量(你可能需要添加别的全局变量)
HANDLE hStdout; //同学们不需要了解这个全局变量
COORD cursor_position; //同学们不需要了解这个全局变量
CONSOLE_CURSOR_INFO cciInfo; //同学们不需要了解这个全局变量
char username[40];
char password[40];
unsigned int difficulty = 300; //默认游戏难度是300毫秒,也就是每隔300毫秒蛇就会前进一步。这个数值越小游戏难度越高
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
void set_cursor_to(int x, int y) //这个函数供你直接调用,不需要了解这个函数中的语句
{
cursor_position.X = x;
cursor_position.Y = y;
SetConsoleCursorPosition(hStdout, cursor_position);
}
/*--------------------------------------------------------------------------------------------------------------------------------------------
游戏线程函数。功能描述:先绘制初始游戏界面,然后根据全局变量difficulty,每隔那么多毫秒就将蛇推向前进一步并更新游戏界面。
--------------------------------------------------------------------------------------------------------------------------------------------*/
unsigned long WINAPI GameThread(void * lpParameter) //不用了解这个函数的参数是什么,我们这个课题不需要使用这个参数
{
//添加你的代码
???
return 0;
}
void start_game()
{
int i;
HANDLE hGameThread; //不需要了解这个变量
//这里需要你添加什么游戏刚开始时的代码?
???
//隐藏控制台窗口的光标,并为后面定位光标做好准备。同学们可以不用了解这几行。
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
cciInfo.dwSize = 1;
cciInfo.bVisible = FALSE;
SetConsoleCursorInfo(hStdout, &cciInfo);
srand(time(NULL));
hGameThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)GameThread, NULL, 0, NULL);
while(1)
{
i = getch();
if(i == 27) //ESC键
break;
if(i == 72 || i == 80 || i == 75 || i == 77) //上下左右方向键
{
//添加你的代码
???
}
}
TerminateThread(hGameThread, 0);
//这里需要添加什么游戏结束后的代码
???
//重新显示控制台窗口的光标。同学们可以不用了解这几行。
cciInfo.dwSize = 1;
cciInfo.bVisible = TRUE;
SetConsoleCursorInfo(hStdout, &cciInfo);
}
void login()
{
char u[40], p[40];
FILE *fp = fopen(USERINFO_FILENAME, "r+b");
if(fp == NULL)
fp = fopen(USERINFO_FILENAME, "w+b");
if(fp == NULL)
{
printf("无法创建文件userinfo_snake.dat。请确认你是否将可执行文件放在了有权限创建文件的文件夹中。\n按任意键继续...\n");
getch();
exit(0);
}
printf("请输入用户名:");
gets(username);
printf("请输入密码:");
gets(password);
fread(u, 40, 1, fp);
while(!feof(fp))
{
if(strcmp(username, u) == 0)
{
fread(p, 40, 1, fp);
if(strcmp(password, p) == 0)
{
printf("登录成功!\n");
fclose(fp);
printf("\n按任意键继续...\n");
getch();
return;
}
else
{
printf("密码错误!\n");
fclose(fp);
printf("\n按任意键继续...\n");
getch();
exit(0);
}
}
fread(p, 40, 1, fp);
fread(u, 40, 1, fp);
}
fwrite(username, 40, 1, fp);
fwrite(password, 40, 1, fp);
fclose(fp);
printf("注册成功!\n");
printf("\n按任意键继续...\n");
getch();
}
void list_menu()
{
system("cls");
//列出菜单
printf("\n\n--------------------贪吃蛇-------------------\n");
printf(" 欢迎您,"); printf(username);
printf("\n\n 主菜单\n");
printf(" 1. 难度设置\n");
printf(" 2. 开始游戏\n");
printf(" 3. 英雄榜单\n");
printf(" 4. 退 出\n");
printf("----------------------------------------------\n");
}
void choose()
{
int choice;
char str[100];
printf("请选择操作: ");
gets(str);
system("cls");
if(strlen(str) != 1 || !(str[0] >= '1' && str[0] <= '4'))
{
printf("输入错误!\n");
printf("\n按任意键返回...\n");
getch();
return;
}
sscanf(str, "%d", &choice);
switch(choice)
{
case 1:
//这里需要添加你的代码
???
break;
case 2:
start_game();
break;
case 3:
//这里需要添加你的代码
???
break;
case 4:
exit(0);
}
}
int main()
{
login();
while(1)
{
list_menu();
choose();
}
return 0;
} 在???处添加代码
最新发布