首页 > 其他分享 >贪吃蛇代码第一天

贪吃蛇代码第一天

时间:2024-07-13 15:09:26浏览次数:6  
标签:body head 第一天 代码 tail 贪吃蛇 snake col row

1.1初始化curses

初始化curses
void initscr_func(){
    initscr();
    keypad(stdscr,true);
}

1.2创建贪吃蛇

点击查看代码
//贪吃蛇创建
snake_t* create_snake(int row, int col){
        snake_head = (snake_t*)malloc(sizeof(snake_t));  //蛇头分配内存
        snake_head->row = row;  //蛇头在的行数
        snake_head->col = col;  //蛇头在的列数
        snake_head->next = NULL;
        snake_tail=snake_head;  //初始化蛇头和蛇尾的位置
        add_snake_body();  //添加蛇身体
        add_snake_body();
        return snake_head;
        
}
1.3 添加贪吃蛇身体
点击查看代码
//添加贪吃蛇身体
void add_snake_body(){
        snake_t *snake_body = (snake_t*)malloc(sizeof(snake_t));  //蛇身体分配内存
        while (snake_tail->next!=NULL){
            snake_tail=snake_tail->next;      //找到尾节点
        }
        snake_body->row = snake_tail->row;  //蛇身体行坐标与尾节点坐标相同
        snake_body->col = snake_tail->col+1;  //蛇身体纵坐标在尾节点的右边
        snake_body->next = NULL;  //蛇身体的下一个节点为空

        snake_tail->next = snake_body;  //尾节点的下一个节点指向蛇身体
        snake_tail=snake_body;  //更新尾节点
}

1.4蛇的尾部删除和判断是否需要重新初始化蛇子(在蛇撞墙后)

点击查看代码
//delete snake body(head delete)
void rig_delete_snake_body(){
    snake_t *p;
    if(snake_head!=NULL){
        p=snake_head;  //保存头节点
        snake_head=snake_head->next;  //头节点指向下一个节点
    }
    free(p);  //释放头节点内存
}
//judge has snake body
int has_snake_body(int row, int col){
    snake_t *p = snake_head;
    while(p!=NULL){
        if(p->row==row&&p->col==col){
            return 1;
        }
         p = p->next;
    } 
    return 0;
}

bool snake_need_init(){
    // if(snake_head->row==0||snake_head->col==0||snake_head->row==20||snake_head->col==20){
    //     return true;
    // }
    // else 
    if (snake_tail->row==MIN||snake_tail->col==MIN||snake_tail->row==HEIGHT-1||snake_tail->col==HEIGHT-1){
        return true;
    }
    else{
        return false;
    }
    
}

1.5蛇的移动

点击查看代码
//right move
void rig_move_snake(){
    


    //判读是否需要重新开始游戏
    if (snake_need_init()==true){
        snake_t *old_sanke_head =NULL;

        //游戏初始前,回收上一次蛇身子
        while(snake_head!=NULL){
        old_sanke_head = snake_head;
        snake_head = snake_head->next;
        free(old_sanke_head);
        }
        
        create_snake(6,6); //创建蛇
        map_init(WIDHT,HEIGHT);
    }

    //不需要重新开始游戏
    else{
        rig_delete_snake_body();
        add_snake_body();
        map_init(WIDHT,WIDHT);
    }
    
}

1.6蛇的向右移动

点击查看代码
//right move
void rig_move_snake(){
    


    //判读是否需要重新开始游戏
    if (snake_need_init()==true){
        snake_t *old_sanke_head =NULL;

        //游戏初始前,回收上一次蛇身子
        while(snake_head!=NULL){
        old_sanke_head = snake_head;
        snake_head = snake_head->next;
        free(old_sanke_head);
        }
        
        create_snake(6,6); //创建蛇
        map_init(WIDHT,HEIGHT);
    }

    //不需要重新开始游戏
    else{
        rig_delete_snake_body();
        add_snake_body();
        map_init(WIDHT,WIDHT);
    }
    
}

1.7初始化地图

点击查看代码
//初始化地图
void map_init(int witdh, int height)
{
    int row,col;
    
    
    move(MIN,MIN); //复位光标
    
    for (row = 0; row < witdh; row++)  //打印地图边界
    {
        if(row==0){
            for (col = 0; col < height; col++){
                printw("--");

            }
            
        }
        printw("\n");
        
            for (col = 0; col <= height; col++){
                if (col==0||col==height)
                {
                    printw("|");
                }
                else if(has_snake_body(row,col)){
                  printw("[]");
                }
                else{
                    printw("  ");
                }
            }
            printf("\n"); 
        
    
    }
    printw("\n");
        for (col = 0; col < height; col++){
        printw("--");
        }

        move(MIN,MIN); //复位光标,防止光标在最后一行
}

标签:body,head,第一天,代码,tail,贪吃蛇,snake,col,row
From: https://www.cnblogs.com/guoguo1728/p/18300085

相关文章

  • 基于ssm+vue.js+uniapp的汽车养护管理系统附带文章和源代码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 全栈物联网项目:结合 C/C++、Python、Node.js 和 React 开发智能温控系统(附代码示例)
    1.项目概述本文详细介绍了一个基于STM32微控制器和AWSIoT云平台的智能温控器项目。该项目旨在实现远程温度监控和控制,具有以下主要特点:使用STM32F103微控制器作为主控芯片,负责数据采集、处理和控制逻辑采用DHT22数字温湿度传感器,精确采集环境温湿度数据通过ESP8266WiF......
  • 【华为OD】D卷真题100分:阿里巴巴找黄金宝箱(III) python代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客Java、JS、python、C、C++代码实现:【华为OD】D卷真题100分:阿里巴巴找黄金宝箱(III)Java代码实现[思路+代......
  • 【华为OD】D卷真题100分:内存资源分配 Java代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、C、Java、python、C++代码实现:【华为OD】D卷真题100分:内存资源分配JavaScript代码实现[思路+代码]-C......
  • 基于Java+Vue的采购管理系统:实现采购业务数字化变革(整套代码)
    前言:采购管理系统是一个综合性的管理平台,旨在提高采购过程的效率、透明度,并优化供应商管理。以下是对各个模块的详细解释:一、供应商准入供应商注册:供应商通过在线平台进行注册,填写基本信息和资质文件。资质审核:系统对供应商提交的资质文件进行自动或人工审核,确保供应商符......
  • 2024 辽宁省大学数学建模竞赛B 题 钢铁产品质量优化完整思路 代码 结果分享(仅供学习)
    冷轧带钢是钢铁企业的高附加值产品,其产品质量稳定性对于钢铁企业的经济效益具有非常重要的影响。在实际生产中,冷连轧之后的带钢需要经过连续退火处理来消除因冷轧产生的内应力并提高其机械性能。连续退火的工艺流程如图1所示,一般包括加热、保温、缓冷、快冷、过时效、淬火等......
  • ssycms 常用的文章列表调用代码
    常用的文章列表调用代码最新文章{tag:articleid="val"cid='$itemInfo["cid"]'limit='10'}<ahref="{$val.url}"class="item-link"title="{$val.title}">{$val.title}</a>{/tag:article}热门文......
  • ssycms不常用的文章列表调用代码
    不常用的文章列表调用代码调用指定关键词文章列表{tag:articleid="val"keywords="seo,优化"limit='10'}<ahref="{$val.url}"class="item-link"title="{$val.title}">{$val.title}</a>{/tag:article}调用指定ID文章列表......
  • Java代码初始化块
    目录实例域代码块静态域代码块初始化代码块分为静态域代码块和实例域代码块,静态域代码块在类第一次被加载时被执行,实例域代码块在创建对象时被执行,一个类中可以有多个代码块。 实例域代码块使用方法可以有输出语句可以对类的属性、类的声明进行初始化操作对集......
  • 持续学习中避免灾难性遗忘的Elastic Weight Consolidation Loss数学原理及代码实现
    训练人工神经网络最重要的挑战之一是灾难性遗忘。神经网络的灾难性遗忘(catastrophicforgetting)是指在神经网络学习新任务时,可能会忘记之前学习的任务。这种现象特别常见于传统的反向传播算法和深度学习模型中。主要原因是网络在学习新数据时,会调整权重以适应新任务,这可能会导致之......