贪吃蛇游戏的代码

#include <iostream>
#include <string>
#include<windows.h>
#include <conio.h>
#include<thread>
#include "/Users/Administrator/source/repos/ConsoleApplication1/Test.h"
using namespace std;

string h1 = "*****************************************************************************\n";
string h2 = "*                                                                                                         *\n";
clock_t tstart, tfinish;
const unsigned char CTRL_KEY = 0XE0;
const unsigned char LEFT = 0X4B;
const unsigned char RIGHT = 0X4D;
const unsigned char DOWN = 0X50;
const unsigned char UP = 0X48;

typedef struct snbody
{
    char z = '%';
    short x, y;

}Body;
Body  B[1678], A;
Body *Topbody = &B[1];
Body *Nxbody = &B[0];
Body *Midbody = &A;
char map[76][22] = { 0 };
short xpos = 10, ypos = 5;
short showchar();
short nxchar = 1;
int start = 1;
int out(short x, short y);
int stime = 200;
int num = 0;
short tar[2];

int onmap(short x, short y,char z)
{
    if ( map[x][y] != '<' && map[x][y] !=  '>' && map[x][y] != 'A' && map[x][y] != 'V')
    {
        
        
        if (Topbody - B > 1670) 
            Topbody = &B[0];
            
        
        if(Nxbody -B > 1670)
            Nxbody = &B[0];
            
        Topbody->z = map[x][y] = z;
        Topbody->x = x;
        Topbody->y = y;
        //Midbody->z = Topbody->z;
        if (x == xpos && y == ypos)
        {
           
            ++num;
            xpos = (rand() % (76 - 1)) + 1;
            ypos = (rand() % (22 - 1)) + 1;
            tar[0] = xpos;
            tar[1] = ypos;
            if(stime>100)
                stime = stime-10;

}
        else
        {
            
            
                out(Nxbody->x, Nxbody->y);
                map[Nxbody->x][Nxbody->y] = '0';
                Nxbody->z = '0';
                printf("%c",'\0');
                ++Nxbody;

}

out(x, y);
            cout << Topbody->z;
            ++Topbody;

}
    else
    {
        cout << "game over!!!";
        start = 0;
        system("cls");
        out(38,12);
        cout << "一共吃掉:" << num <<"个桃子"<< endl;
        Sleep(5000);
        return 1;
    }
    
    
    return 0;
}
int movefor(short *pos,char z ,int (*pt)(short *, char ))
{
    while (TRUE)
    {
        
        showchar();
        if(_kbhit())
            return 0;
        Sleep(stime); 
    //    pt(pos, z); 这里的注释,原本是调用方向键按下的对应函数,但现在用下面的Test函数来玩这个游戏。
        Test(pos, tar,map, z);
    }

return 0;

}
    int out(short x,short y)
    {
         
        HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获得屏幕的尺寸。
        COORD pos = { x,y };//设置坐标
        SetConsoleCursorPosition(hOut, pos);//设置位置

return 0;
    }
    int move_left(short *pos, char z)
    {
        if (pos[0] <= 1)
            pos[0]=76;

out(--pos[0],pos[1]);
        
        if (onmap(pos[0], pos[1],z='<'))
            return 1;
        movefor(pos, z, move_left);
        return 0;
    }
    int move_right(short *pos, char z)
    {
        if (pos[0] >= 75)
            pos[0]=0;

out(++pos[0], pos[1]);

if (onmap(pos[0], pos[1],z='>'))
            return 1;
        movefor(pos, z, move_right);
        return 0;
    }
    int move_up(short *pos, char z)
    {
        if (pos[1] <= 1)
            pos[1]=22;

out(pos[0], --pos[1]);

if (onmap(pos[0], pos[1],z='A'))
            return 1;
        movefor(pos, z, move_up);
        return 0;
    }
    int move_down(short *pos,char z)
    {
        if (pos[1] >= 21)
            pos[1]=0;

out(pos[0], ++pos[1]);

if (onmap(pos[0], pos[1],z='V'))
            return 1;
        movefor(pos, z, move_down);
        return 0;
    }
    
    short showchar()
    {
        //int x,y;
        
        out(xpos,ypos);
        switch(nxchar)
        {
        case 1:cout << '|' << '\b';  break;
        case 2:cout << '/' << '\b'; break;
        case 3:cout << '-' << '\b'; break;
        case 4:cout << '\\' << '\b'; break;
        default:nxchar = 1; break;
        }
        ++nxchar;
        tfinish=clock();
        
            out(86, 1);
            printf("%u",(tfinish - tstart) / CLOCKS_PER_SEC );
            out(92, 3);
            cout << num;
        
        return 0;
    }
int main(){
    char z = '*';
    cout << h1 ;
    for (int i = 0; i <= 20; i++)
        cout << h2;
    cout << h1;
    out(80, 1);
    cout << "时间:" ;
    out(80, 3);
    cout << "你已经吃了:"<<'\t'<< "个桃子";
    short pos[2] = {38,11};
    
    int flag = 0;
    out(pos[0], pos[1]);
    xpos = (rand() % (76 - 1)) + 1;
    ypos = (rand() % (22 - 1)) + 1;
    tstart=clock();
    srand(tstart);
    tar[0] = xpos;
    tar[1] = ypos;
    while (start)
    {
        
        Test(pos, tar,map, z);
        if (flag)
        {
            switch (_getch())
            {
            case LEFT:move_left(pos,z); break;
            case RIGHT:move_right(pos, z ); break;
            case DOWN:move_down(pos, z ); break;
            case UP:move_up(pos, z ); break;
            default:  break;
            }
        }
        else
        {
            if (_getch() == CTRL_KEY)
                flag = 1;
        }
   }

下面是让程序自己玩贪吃蛇

int Test(short *pos, short *tar, char(*map)[22], char z)
{
    int x, y;
    x = pos[0];
    y = pos[1];

char stopr = '0';
    char stopl = '0';
    char stopu = '0';
    char stopd = '0';

if (map[x + 1][y] == 'A' || map[x + 1][y] == 'V')
            stopr = map[x + 1][y];
        if (map[x - 1][y] == 'A' || map[x - 1][y] == 'V')
            stopl = map[x - 1][y];
        if (map[x][y - 1] == '<' || map[x][y - 1] == '>')
            stopu = map[x][y - 1];
        if (map[x][y + 1] == '<' || map[x][y + 1] == '>')
            stopd = map[x][y + 1];

if (pos[0] < tar[0] && map[x + 1][y] != '<' && map[x + 1][y] != '>' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V' )
        {
            
            move_right(pos, z);

}
        else if (pos[0] > tar[0] && map[x - 1][y] != '<' && map[x - 1][y] != '>' && map[x - 1][y] != 'A' && map[x - 1][y] != 'V' )
        {
            
                    move_left(pos, z);
        }

else if (pos[1] < tar[1] && map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V' )
        {
            if (z == '<')
            {
                if (stopl == 'V'&& map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
                    move_up(pos, z);
                else 
                    move_down(pos, z);
            }
                
            else if (z == '>')
            {
                if (stopr == 'V'&& map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
                    move_up(pos, z);
                else 
                    move_down(pos,z);

}
                
            else
                move_down(pos, z);
        }
        else if (pos[1] > tar[1] && map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
        {
            if (z == '<')
            {
                if (stopl == 'A'&& map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
                    move_down(pos, z);
                else 
                    move_up(pos, z);
                 
                    
            }

else if (z == '>')
            {
                if (stopr == 'A'&& map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
                    move_down(pos, z);
                else 
                    move_up(pos, z);

}

else
                
                move_up(pos, z);
        }
        else
        {
            
            
                if ( map[x - 1][y] != '<' && map[x - 1][y] != '>' && map[x - 1][y] != 'A' && map[x - 1][y] != 'V' )
                {
                    if (z == 'V')
                    {
                        if (stopd == '<'&& map[x + 1][y] != '>' && map[x + 1][y] != '<' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V')
                            move_right(pos, z);
                        else 
                            move_left(pos, z);
                        
                    }

else if (z == 'A'&& map[x + 1][y] != '>' && map[x + 1][y] != '<' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V')
                    {
                        if (stopu == '<')
                            move_right(pos, z);
                        else 
                            move_left(pos, z);
                        
                    }
                    else
                        move_left(pos,z);

}
                else if ( map[x + 1][y] != '<' && map[x + 1][y] != '>' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V')
                {
                    if (z == 'V')
                    {
                        if (stopd == '>'&& map[x - 1][y] != '>' && map[x - 1][y] != '<'&& map[x - 1][y] != 'A' && map[x - 1][y] != 'V')
                            move_left(pos, z);
                        else 
                            move_right(pos, z);
                        
                    }
                    else if (z == 'A')
                    {
                        if (stopu == '>'&& map[x - 1][y] != '>' && map[x - 1][y] != '<' && map[x - 1][y] != 'A' && map[x - 1][y] != 'V')
                            move_left(pos, z);
                        else 
                            move_right(pos, z);
                        
                    }
                    else
                        move_right(pos, z);
                }

else if (map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V' )
                {
                    if (z == '>')
                    {
                        
                        if (stopr == 'V'&& map[x][y - 1] != '>'&& map[x][y - 1] != '<' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
                            move_up(pos, z);
                        else 
                            move_down(pos, z);
                        
                    }
                    else if (z == '<')
                    {
                        if (stopl == 'V'&& map[x][y - 1] != '>'&& map[x][y - 1] != '<' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
                            move_up(pos, z);
                        else 
                            move_down(pos, z);
                        
                    }
                    else
                        move_down(pos, z);
                }
                else if ( map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
                {
                    if (z == '>')
                    {
                        if (stopr == 'A'&& map[x][y + 1] != '>'&& map[x][y + 1] != '<' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
                            move_down(pos, z);
                        else 
                            move_up(pos, z);
                        
                    }
                    else if (z == '<')
                    {
                        if (stopl == 'A'&& map[x][y + 1] != '>' && map[x][y + 1] != '<' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
                            move_down(pos, z);
                        else 
                            move_up(pos, z);
                        
                    }
                    else
                        move_up(pos, z);
                }

}

return 0;

}

c++ 让程序玩贪吃蛇游戏相关推荐

  1. C语言:如何在cmd命令窗口上玩贪吃蛇游戏

    最近在重新学习C语言知识,还别说,在这个过程中,我还真的学到了过去很多没有学习到C语言知识,于是就做了这个游戏–贪吃蛇. 运行结果如下: C语言:如何在cmd命令窗口上玩贪吃蛇游戏 文章目录 1. 实 ...

  2. 黑马程序员——贪吃蛇游戏项目分析过程

    ---------------------- <a href="http://edu.csdn.net/heima" target="blank"> ...

  3. 【python教程入门学习】Python实现自动玩贪吃蛇程序

    这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学 实现效果 先看看效果 这比我手动的快多了,而且是单机的,自动玩没惹 ...

  4. 我的编辑器能玩贪吃蛇,一起玩不?

    摘要:你们说,能不能把这个贪吃蛇游戏插入到编辑中呢? 本文分享自华为云社区<整个贪吃蛇到编辑器里玩吧>,原文作者:DevUI. 能不能把这个贪吃蛇游戏插入到编辑中呢? 按照以下四个步骤来就 ...

  5. python小游戏课程设计报告_贪吃蛇游戏课程设计报告

    贪吃蛇游戏程序设计 一.课程设计任务 贪吃蛇小游戏程序设计 二.设计要求 通过游戏程序设计,提高编程兴趣与编程思路,巩固 C 语言中所学的知识,合理的运 用资料,实现理论与实际相结合. ( 1 ) . ...

  6. 用STM32F103使用OLED屏实现贪吃蛇游戏

    偶然一天突发奇想想在MCU上实现一个小游戏,综合现有硬件开发资源和开发能力,想来想去贪吃蛇最为合适. 有之前朋友留给我的一块四轴飞行器遥控器的电路板,上面有摇杆按键和OLED瓶.STM32F103R8 ...

  7. 贪吃蛇大作战代码java,贪吃蛇游戏,贪吃蛇java游戏代码讲解

    贪吃蛇游戏,贪吃蛇java游戏代码讲解 来源:互联网 作者:佚名 时间:2020-06-06 贪吃蛇源代码.txt这世界上除了我谁都没资格陪在你身边. 听着,我允许你喜欢我.除了白头偕老,我们... ...

  8. python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏

    前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...

  9. python写的游戏怎么给别人玩-一步步教你怎么用python写贪吃蛇游戏

    目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Pytho ...

  10. c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...

    对于贪吃蛇游戏,大家基本上都玩过,但是作为一个程序员,大家是否想过要自己去写一个贪吃蛇,毕竟玩别人写的游戏和自己写的游戏是两种截然不同的感受,而且也可以通过制作来提升自己的技术! 其实贪吃蛇的逻辑并不 ...

最新文章

  1. CodeForces - 813C The Tag Game(拉格朗日乘数法,限制条件求最值)
  2. python语言表白源码-python七夕浪漫表白源码
  3. 初始html(常用标签)
  4. Python的第一种数据类型——Number(数字)
  5. linux 正则查找email_Linux 正则表达式详解
  6. jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
  7. vue企业网站模板_模板网站VS定制网站,企业如何选择?
  8. button小手设置 css的cursor
  9. thinkphp增删改查
  10. cmw500综合测试仪使用_网络性能测试仪该怎么选
  11. java ir_基本功 | Java即时编译器原理解析及实践
  12. laravel 图片流_laravel 做图片的缩略图 踩坑
  13. 山寨qq java_MTK手机QQjava版本山寨qq2009通用版
  14. 滑动窗口协议(GBN, SR)
  15. JS实现中文转拼音首字母和五笔简码
  16. 【小工具】文件夹映射为本地磁盘(重启不失效)
  17. php算法----队列
  18. Java中extends 与 implement 区别
  19. 计算机课代表的总结,课代表心得体会总结范文
  20. Redis 自定义对象 cannot be cast to java.lang.String

热门文章

  1. ios 线条球_烧脑挑战画线给小球回家
  2. 网站监控程序uptime-kuma,宝塔面板搭建 ,TCP/HTTP监控
  3. 年度最高奖金【双百万】:2021年全国人工智能大赛开赛啦
  4. GRUB4DOS入门
  5. 【Git】git tag
  6. mysql怎么创建外表_PostgreSQL使用MySQL外表的步骤详解(mysql_fdw)
  7. 高等数学(Calculus I)
  8. 边缘计算相关论文汇总
  9. 阿里中台彻底搞砸了?下一站,小中台大前台
  10. python双色球数据抓取及模拟生成高概率的号码