智能蛇游戏的学习体验

来源:互联网 发布:百知尚行 编辑:程序博客网 时间:2024/06/06 07:51

sin

这次的实验相当于让我学到了c语言新的用途吧,原来一直被我唾弃的c语言也可以写出这么酷炫的游戏真的酷

1.首先就是实验中第一个通过不断刷新打印做出来的动态sin函数
简直就是太漂亮了,而且流畅得不行,源代码也一点都看不懂真的太棒了。

2.然后就是linux下非阻塞的输入控制贪吃蛇,源代码还是一样没看懂,不过先让我吐槽一下c语言吧,其实真的觉得c语言真的好低级啊,居然可以直接调用操作系统的api比如window.h和unix.h。这样不知道是好还是不好,这样如果用c语言写的软件如果想从window移植到linux都好改很多源码,可能放在c语言刚被发明出来的时候很理所当然但是放在现在的环境下就不能算是一个明智的选择了,但凡比较新一点的语言都是把跨平台放在一个比较高的优先级上,不过也正是因为c语言够低级才让它在嵌入式语言里的地位一家独大。

3.然后就是老师给出来的最直观的智能蛇了,通过距离来做出决策够简单够粗暴,如果想加点东西那就可以宽度优先搜索了,至少可以不用当心走到一半撞上自己的身体。还有一种很无脑的方法就是一直从墙的边缘绕圈来不断占领空间来限制money可能会随机生成的空间。如果没有障碍物就可以一直吃下去了。因为这种东西的随机性让想彻底解决贪吃蛇的选择问题变得近乎不可能了,所以要想效果好,想一步走一步是不可能的了,怎么才能做出抉择才能让之后的情形更好才是最关键的问题。
所以废话不多说,上强化学习吧。

// main.c// snake#include<stdio.h>#include<stdlib.h>#include<time.h>#include<conio.h>#define SNAKE_MAX_LENGTH 20#define SNAKE_HEAD 'H'#define SNAKE_BODY 'X'#define BLANK_CELL ' '#define SNAKE_FOOD '$'#define WALL_CELL '*'//move by providing the x_index and y_indexvoid snake_move(int x_index,int y_index);//randomly put moneyvoid put_money();//print the framevoid output();//check for overint gameover();char map[12][13]=    {     "************",     "*XXXXH     *",     "*          *",     "*          *",     "*          *",     "*          *",     "*          *",     "*          *",     "*          *",     "*          *",     "*          *",     "************"    };    struct Point    {        int x;        int y;    };    /*Point x1;    Point x2;    Point x3;    Point x4;    Point x5;*/    struct Point snake_arr[20];    //={x1,x2,x3,x4,x5};    int snake_length=5;    struct Point * head=&snake_arr[4];    struct Point * tail=&snake_arr[0];    int fruit_x=5,fruit_y=5;    void random_generator_fruit()    {        fruit_x=rand()%10+1;        fruit_y=rand()%10+1;        map[fruit_y][fruit_x]='$';        for(int i=0;i<snake_length;i++)        {            if(snake_arr[i].x==fruit_x&&snake_arr[i].y==fruit_y)             random_generator_fruit();        }    }    int process=1;    int main()    {        srand((unsigned)time(NULL));        /*for(i=0;i<12;i++)        {            for(j=0;j<12;j++)            {                if(map[i][j]=='H')                {                    break;                  }            }        }*/        for(int k=4;k>=0;k--)        {            snake_arr[k].x=k+1;            snake_arr[k].y=1;            /*  for(int i=0;i<snake_length-1;i++)            {                snake_arr[i].x=snake_arr[i+1].x;                snake_arr[i].y=snake_arr[i+1].y;            }*/        }        random_generator_fruit();        for(;gameover()!=-1&&process!=0;)        {            system("cls");            output();            char ch=getch();            switch(ch)            {                case 'w':                case 'W':                    snake_move(0,-1);                    break;                case 's':                case 'S':                    snake_move(0,1);                    break;                case 'a':                case 'A':                    snake_move(-1,0);                    break;                case 'd':                case 'D':                    snake_move(1,0);                    break;            }        }        printf("game over");        return 0;    }    void output()    {        for(int i=0;i<12;i++)        {            printf("%s\n",map[i]);        }    }    void snake_move(int x_index,int y_index)    {        int temp_x=head->x+x_index,temp_y=head->y+y_index;        for(int i=0;i<snake_length;i++)        {            if(snake_arr[i].x==temp_x&&snake_arr[i].y==temp_y)            {                process=0;                return ;            }        }        if(temp_x!=fruit_x||temp_y!=fruit_y)        {            map[tail->y][tail->x]=' ';            map[head->y][head->x]='X';            map[head->y+y_index][head->x+x_index]='H';            for(int i=0;i<snake_length-1;i++)            {                snake_arr[i].x=snake_arr[i+1].x;                snake_arr[i].y=snake_arr[i+1].y;            }            snake_arr[snake_length-1].x=temp_x;            snake_arr[snake_length-1].y=temp_y;        }        else        {            map[head->y][head->x]='X';            map[head->y+y_index][head->x+x_index]='H';            snake_arr[snake_length].x=temp_x;            snake_arr[snake_length].y=temp_y;            head=&snake_arr[snake_length];            snake_length++;            random_generator_fruit();        }    }    int gameover()    {        int flag=1;        for(int i=0;i<snake_length;i++)        {            if(snake_arr[i].x<=0||snake_arr[i].x>=11||snake_arr[i].y<=0||snake_arr[i].y>=11)            {                flag=0;                break;            }        }        if(flag==0)        {            return -1;        }        return 1;    }
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么翻外网 免费外网加速器 外发加工网 新荷包外网 访问外网 外网网站 居外网 安卓外网加速器 外网怎么连接 外发加工网哪个真实 连接外网 如何翻外网 外加工网 加速器外网 免费安卓外网加速器 咸阳师范学院教务网外网入口 邢台学院教务处外网入口 2018手机如何翻外网 咸阳师范学院教务网外网 公司电脑如何解除外网限制 极端另类血腥恐怖外网 空调外机防尘罩 空调外机网罩 空调外机保护罩 空调外机罩图片 空调外机防护罩图片 空调机外罩 数控机床外防护罩 机床外防护罩 胸部外扩穿什么罩杯 暖气片装饰外罩 空调外机防雨罩 空调外机罩图片价格 空调外机护罩 汽车外罩遮阳罩 空调外机百叶罩 空调外机隔音罩 洗衣机外罩 空调外机罩有必要吗 车罩 外置