`

贪吃蛇

阅读更多
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
int printgamemop(char gr[20][20],int len,int x[],int y[],int fcount,int fx,int fy);
int movesnake(char s[],char gr[20][20],int *len,int x[],int y[],int *fcount,int *fx,int *fy,int *score);
int addfruit(int *fcount,int *fx,int *fy,int *len,int x[],int y[]);
int gameOver(int len,int x[],int y[],int score);
int gameOver(int len,int x[],int y[],int score)
{
    int gameOver=0;
    for(int i=1; i<len; i++)
    {
        if(x[0]==x[i]&&y[0]==y[i])
        {
            gameOver=1;
            printf("当前分数%d\nGame Over!\n",score);
            break;
        }
    }
    return gameOver;
}
int addfruit(int *fcount,int *fx,int *fy,int len,int x[],int y[])
{
    if((*fcount)==0)
    {
        while(1)
        {
            int tfx=rand()%20;
            int tfy=rand()%20;
            int have=0;//判断fy是否生成果子
            for(int i=0; i<len; i++)
            {
                if(tfx==x[i]&&tfy==y[i])
                {
                    have=1;
                    break;
                }

            }
            if(have==1)
                continue;
            else
            {
                (*fcount)++;
                (*fx)=tfx;
                (*fy)=tfy;
                break;
            }
        }
    }

}
int printgamemop(char gr[20][20],int len,int x[],int y[],int fcount,int fx,int fy)
{
    for(int i=0; i<20; i++)
    {
        for(int j=0; j<20; j++)
        {
            gr[i][j]='.';
            //是否是蛇的一部分
            int snake=0;
            for(int k=0; k<len ; k++)
            {
                if(i==x[k]&&j==y[k])
                {
                    if(k==0)
                    {
                        snake=1;//蛇头
                    }
                    else
                        snake=2;//蛇身
                    break;
                }
            }
            if(snake==1)
            {
                printf("*");
            }
            else if(snake==2)
                printf("o");
            else
            {
                if(fcount&&fx==i&&fy==j)
                    printf("@");
                else printf(". ");
            }
        }
        printf("\n");
    }
}
//蛇的移动
int movesnake(char s[],char gr[20][20],int *len,int x[],int y[],int *fcount,int *fx,int *fy,int *score)
{
    int cx[400];//20*20==400;
    int cy[400];
    memcpy(cx,x,sizeof(int)*(*len));//复制函数,将x中的sizeof(int)*(*len)字节从头开始复制到cx中
    memcpy(cy,y,sizeof(int)*(*len));//做备份
    int move=0;
    if(strcmp(s,"w")==0)
    {
        x[0]=x[0]-1;
        move=1;
    }
    else if(strcmp(s,"s")==0)
    {
        x[0]=x[0]+1;
        move=1;
    }
    else if(strcmp(s,"a")==0)
    {
        y[0]=y[0]-1;
        move=1;
    }
    else if(strcmp(s,"d")==0)
    {
        y[0]=y[0]+1;
        move=1;
    }
//头部
//身体
    if(move==1)
    {
        if((*fcount)&&x[0]==(*fx)&&y[0]==(*fy))
        {
            memcpy(x+1,cx,sizeof(int)*(*len));
            memcpy(y+1,cy,sizeof(int)*(*len));//将蛇的上一个节点复制到下一个节点上
            (*len)++;
            (*fcount)--;
            (*fx)=0;
            (*fy)=0;//初始化
            (*score)++;

            addfruit(fcount,fx,fy,(*len),x,y);//增加下一个水果
        }
        else
        {
            for(int i=1; i<(*len); i++)
            {
                x[i]=cx[i-1];
                y[i]=cy[i-1];
            }
        }

        system("cls");//是一个系统命令,作用是清除刷屏上的所有显示并将光标置于屏幕左上角
        printgamemop(gr,(*len),x,y,*fcount,*fx,*fy);//棋盘初始化
    }
}
int main()
{
    srand(time(NULL));
    char gr[20][20];
    int x[400]= {0}; //代表蛇的行
    int y[400]= {0}; //代表蛇的列
    int len =0;
    x[len]=9;
    y[len]=9;
    len++;//蛇头
    x[len]=9;
    y[len]=8;
    len++;//蛇的第一个蛇身
    int fx=0;//水果的坐标x
    int fy=0;//水果的坐标y
    int fcount=0;//水果数量
    int score=0;//得分数
    //随机生成水果
    addfruit(&fcount,&fx,&fy,len,x,y);
    printgamemop(gr,len,x,y,fcount,fx,fy);
    while(1)
    {
        printf("当前分数%d,请输入w向下,s向上,a向左,d向右\n",score);
        char s[2];
        scanf("%s",s);
        //move
        movesnake(s,gr,&len,x,y,&fcount,&fx,&fy,&score);
        if(gameOver(len,x,y,score)==1)break;

    }
    return 0;
}

 

分享到:
评论

相关推荐

    [Android游戏源码]-简单的贪吃蛇源码.rar_Android游戏源码_android_android 贪吃蛇_贪吃蛇_贪

    《简单的贪吃蛇源码分析与探讨》 贪吃蛇是一款经典的休闲游戏,深受各年龄段玩家的喜爱。在Android平台上,我们可以找到许多实现贪吃蛇的游戏源码,这为我们理解和学习移动游戏开发提供了宝贵的学习资源。这里我们...

    jQuery贪吃蛇网页版游戏代码

    jQuery贪吃蛇网页版游戏代码,贪吃蛇网页版游戏代码基于jquery.1.11.3.min.js制作,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.Query网页版贪吃蛇游戏,带得分排行榜,交互的贪吃蛇游戏...

    双人贪吃蛇源代码

    双人贪吃蛇源代码 作为一名 IT 行业大师,我将为您生成相关知识点,详细解释标题、描述、标签和部分内容中的知识点。 标题:双人贪吃蛇源代码 双人贪吃蛇源代码是指在计算机程序设计基础课程设计中,设计和实现的...

    贪吃蛇_贪吃蛇图片.ico_贪吃蛇游戏mfc_贪吃蛇_MFC_

    标题中的“贪吃蛇_贪吃蛇图片.ico_贪吃蛇游戏mfc_贪吃蛇_MFC_”表明这是一个关于使用Microsoft Foundation Classes (MFC)框架开发的贪吃蛇游戏项目,其中可能包含了游戏的图标资源(.ico文件)和其他相关文件。...

    32贪吃蛇_基于stm32的oled贪吃蛇游戏_贪吃蛇STM32_stm32f103ret6_stm32贪吃蛇_贪吃蛇htm_源

    《基于STM32的OLED贪吃蛇游戏详解》 贪吃蛇游戏,作为一个经典的电子游戏,自上世纪80年代以来就深受玩家喜爱。而如今,我们可以通过微控制器(MCU)实现这个游戏,例如STM32系列单片机。本文将深入探讨如何使用STM...

    自己制作的贪吃蛇的aia

    贪吃蛇的aia 贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。 [1] 另外还有一种名为“贪吃蛇”钻井测井技术,是运用旋转导向系统、...

    贪吃蛇-代码-uml设计

    《贪吃蛇游戏的UML设计与实现》 贪吃蛇是一款经典的电子游戏,它以其简单易懂的规则和无尽的游戏模式深受玩家喜爱。在软件工程领域,将这种游戏进行设计并编码时,通常会借助统一建模语言(UML)来规划和组织项目的...

    Labview贪吃蛇课程设计

    《Labview贪吃蛇课程设计:打造趣味性虚拟仪器》 Labview(Laboratory Virtual Instrument Engineering Workbench)是一款由美国国家仪器公司(NI)开发的图形化编程环境,专为构建虚拟仪器而设计。在“Labview...

    GUI贪吃蛇图片素材

    在这个系列中,"贪吃蛇"小游戏是一个常见的教学实例,它通过实现一个简单的游戏来帮助初学者理解和运用Java的基本概念。 贪吃蛇游戏通常涉及到图形用户界面(GUI)的创建,这是Java中的一个重要主题。GUI允许用户与...

    AD工程 贪吃蛇脚本.rar

    标题中的“AD工程 贪吃蛇脚本.rar”表明这是一个与Active Directory(AD)相关的项目,同时结合了“贪吃蛇”的元素,这通常意味着它是一个编程脚本,可能是用某种编程语言编写的,用于在Windows环境中进行自动化或者...

    贪吃蛇大战 cocoscreator

    《贪吃蛇大战》是一款基于Cocos Creator开发的多人在线竞技游戏,它的核心玩法是玩家控制一条不断增长的蛇,在地图上吞食食物,同时避免与其他玩家的蛇相撞,以此来获得分数并竞争排行榜。Cocos Creator是一个强大的...

    大作业python游戏编程课程设计魔改贪吃蛇之贪吃蛇捕蛙游戏源码.zip

    大作业python游戏编程课程设计魔改贪吃蛇之贪吃蛇捕蛙游戏源码,完整代码注释,开发文档。 基于贪吃蛇捕蛙的游戏,贪食蛇吃了青蛙并不会变长,当贪食蛇吃了一些青蛙之后,游戏关卡会升级,升级后蛇的行动速度会变快...

    greedysnake_QT5贪吃蛇_qt贪吃蛇_贪吃蛇_

    【标题】"greedysnake_QT5贪吃蛇_qt贪吃蛇_贪吃蛇_" 指的是一个使用QT5框架开发的贪吃蛇游戏项目。QT5是Qt库的一个版本,它是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动和嵌入式系统的图形用户界面。这...

    C语言--贪吃蛇相关PPT(详细介绍相关贪吃蛇过程及问题).pptx

    "C语言贪吃蛇相关PPT详细介绍贪吃蛇过程及问题" 通过分析给定的文件信息,我们可以总结出以下知识点: 1. C语言编程:贪吃蛇游戏的开发过程中使用C语言编程,包括项目的建立、头文件的使用、预编译头文件的作用等...

    个人编写的贪吃蛇

    【贪吃蛇游戏详解】 贪吃蛇是一款经典的计算机游戏,起源于1976年的"Blockade",随后在各种早期计算机和手机平台上流行。在这个个人编写的版本中,我们有机会深入了解一个简单的贪吃蛇游戏是如何实现的。下面将详细...

    贪吃蛇源码eclipse开发

    贪吃蛇是一款经典的电子游戏,它的源码分析和学习对于初学者来说是非常有价值的。这个"贪吃蛇源码eclipse开发"项目是用Java语言在Eclipse集成开发环境中编写的,因此我们可以从中深入理解Java编程语言和Eclipse IDE...

    13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13...

    c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇

    c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇,c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇,c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇

    C#贪吃蛇(非常强悍的C#贪吃蛇游戏,你一定不会后悔的)

    《C#贪吃蛇》是一款基于C#编程语言开发的极具挑战性和趣味性的经典小游戏,其强大之处在于它不仅保留了传统贪吃蛇的基本玩法,还融入了丰富的关卡设计和多样化的游戏功能,给玩家带来了更为丰富的游戏体验。...

    贪吃蛇程序包含源码

    《贪吃蛇程序详解——基于MFC与C++的实现》 贪吃蛇游戏作为一款经典的游戏,其简单易懂的规则和丰富的可玩性深受玩家喜爱,同时也是初学者学习编程的良好实践项目。本篇文章将深入探讨一个由初学者用MFC(Microsoft...

Global site tag (gtag.js) - Google Analytics