​​​​​​​C语言贪吃蛇——“聪明的小蛇”课程设计报告书

“聪明的小蛇”课程设计报告书

一、选题

聪明的小蛇

二、需求分析

用C语言编写“聪明的小蛇”,实现蛇的运动、吃食物、吃毒草、地雷、关卡等基本功能和360度转动、智慧草、毒草闪烁        、游戏场景保存、图形界面等附加功能。蛇在运动过程中撞到墙壁或咬到自己或吃到炸弹使蛇身长度小于2节时,游戏结束。

三、系统设计

1、数据结构设计

蛇身、墙壁、智慧草、食物、炸弹、毒草均使用以下数据结构:

struct snake

{

        char x;

        char y;

        struct snake *next;

        struct snake *previous;

}

2、算法和程序流程:

3、模块间接口描述

(1)全局变量

整数型:score、stage、status、sleeptime、flag_create_poison、flag_color、flag_read_wall、flag_wisdom_eat、flag_next_created、flag_wisdom_created、flag_graph

长整型:game_time_1

(2) 子模块返回的信息

调用自定义函数check_bite : return 1代表能咬到蛇身,return 0代表不能咬到蛇身;调用自定义函数check_coincidence : return 1代表生成的坐标与已有坐标重复,return 0代表生成的坐标不与已有坐标重复。

(3)实参为形参传值

自定义函数end_game接受传值后显示不同的结束状态;自定义函数set_pos接受传值后把光标移至指定位置;自定义函数sort接受数组地址后对数组内容进行修改。

(4)使用指针

自定义函数sort接受传入地址后修改地址对应的数据。

四、界面设计

    开始和结束界面采用图形界面,通过按钮交互;游戏界面采用文本界面,通过按键交互。

五、系统实现

核心代码:

/

// 程序名称:聪明的小蛇

// 编译环境:VS2013+EasyX(20170919)

// 作  者:CDSN——哆啦一泓

// 最后修改:2018-1-11

/

struct snake

{

        char x;

        char y;

        struct snake *next;

        struct snake *previous;

}



void snake_move()//蛇前进

{

        struct snake * next_head;

        next_head = (struct snake*)malloc(sizeof(struct snake));

        change_status();

        p = next_head;

        if (flag_wisdom_eat == 0)check_wall();

        if (flag_wisdom_eat == 0 && check_bite(next_head) == 1)end_game(3);    

if (next_head->x == food->x && next_head->y == food->y)eat_food();

        else if (flag_wisdom_eat == 0 && next_head->x == bomb->x && next_head->y == bomb->y)eat_bomb();

        else if (flag_wisdom_eat == 0 && next_head->x == poison->x && next_head->y == poison->y)eat_bomb();

        else if (flag_wisdom_eat == 0 && next_head->x == wise->x && next_head->y == wise->y)eat_wisdom();

        else 继续前进

}



void game_begin()

{

        create_wall();

        initialize();

        wall = (struct snake*)malloc(sizeof(struct snake));

        q = (struct snake*)malloc(sizeof(struct snake));

        wall->x = -1 * 2;

        wall->y = -1;

        wall->next = NULL;

        snake_initialize();

        create_food();

        create_bomb();

        create_added_wall();

}



void game_control()//游戏控制

{

        int flag = 0;

        long game_time_10;

        while (1)

        {

                 if (flag_wisdom_eat == 1)eat_wisdom();

                 show_progress();

                 if (score >= 100)go_to_next_stage();

                 get_key_state();

                 Sleep(sleeptime);

                snake_move();

        }

}



int main()

{

        system("title 聪明的小蛇 By 数媒1701班 李一泓");

welcome();

}

六、测试与调试

七、心得与体会

此次课程设计,我深刻体会到了编程知识积累的重要性。在课设中我遇到了不少难题,但是经过仔细研究,得到解决。一个月的课设结束了,我的收获颇丰,同时也更深刻地认识到要做一个合格的程序员最重要的是严谨。贪吃蛇的设计使我学到了很多东西,为我以后的学习做了引导,点明了方向。

这次课设,我更多学到的是不懂就要问和尽全力尝试,哪怕失败,也要竭尽全力,最后在自己的努力下,取得成功,这种感觉美不可言,成就感十足。相信在不久的将来,我会开创自己的一片天空。

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
用windows api 做的贪吃 #include #include"resource.h" #include"Node.h" #include #include TCHAR szAppname[] = TEXT("Snack_eat"); #define SIDE (x_Client/80) #define x_Client 800 #define y_Client 800 #define X_MAX 800-20-SIDE //点x的范围 #define Y_MAX 800-60-SIDE //点y的范围 #define TIME_ID 1 #define SECOND 100 #define NUM_POINT 10 //点的总个数 #define ADD_SCORE 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; //窗口句柄 MSG msg; //消息 WNDCLASS wndclass; //窗口类 HACCEL hAccel;//加速键句柄 wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口的水平和垂直尺寸被改变时,窗口被重绘 wndclass.lpfnWndProc = WndProc; //窗口过程为WndProc函数 wndclass.cbClsExtra = 0; //预留额外空间 wndclass.cbWndExtra = 0; //预留额外空间 wndclass.hInstance = hInstance; //应用程序的实例句柄,WinMain的第一个参数 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //设置图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //载入预定义的鼠标指针 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置画刷 wndclass.lpszMenuName = szAppname; //设置菜单 wndclass.lpszClassName = szAppname; //设置窗口类的名字 if (!RegisterClass(&wndclass))//注册窗口类 { MessageBox(NULL, TEXT("这个程序需要windows NT!"), szAppname, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppname, TEXT("Snack_eat"),//CreateWindow函数调用时,WndProc将受到WM_CREATE WS_OVERLAPPEDWINDOW&~WS_THICKFRAME& ~WS_MAXIMIZEBOX,//普通的层叠窗口&禁止改变大小&禁止最大化 CW_USEDEFAULT, //初始x坐标(默认) CW_USEDEFAULT, //初始y坐标 x_Client, //初始x方向尺寸 770 y_Client, //初始y方向尺寸 750 NULL, //父窗口句柄 NULL, //窗口菜单句柄 hInstance, //程序实例句柄 WinMain函数中第二个参数 NULL); //创建参数 ShowWindow(hwnd, iCmdShow);//显示窗口,iCmdShow是WinMain的第四个参数,决定窗口在屏幕中的初始化显示形式,例:SW_SHOWNORMAL表示正常显示 UpdateWindow(hwnd);//使窗口客户区重绘,通过向WndProc发送一条WM_PAINT消息而完成的 hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }/* while (GetMessage(&msg, NULL, 0, 0))//GetMessage函数从消息队列中得到消息,填充msg。如果msg.message等于WM_QUIT,返回0,否则返回非0 { TranslateMessage(&msg);//将msg返回给windows已进行某些键盘消息的转换 DispatchMessage(&msg);//将msg再次返回给windows }*/ return msg.wParam;//msg.wParam是PostQuitMessage函数的参数值,通常是0 } ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值