PlantsVsZombies_v2.0_1

第二版,改进很大!!关键是正确了!!下一版,封装结构体。

#include <stdio.h>
#include <string.h>
#include "api.h"
#include "PlantsVsZombies.h"

EndSysInfo sysBaseInfo = {0};

int grassArray[2][10] = {0};//标记草地是否可种植
int zombieLife[2][10] = {3};//标记僵尸的生命值

void main(int argc, char* argv[])
{
    CmdReset();
    /*
    启动Socket服务侦听5555端口(sapi_server_start函数在lib库已实现)。
    lib库已实现从Socket接收到字符串后的命令分发处理;
    */
    api_server_start(argc, argv);
    // 此处不会执行到,注意不要在此处添加代码
}

void CmdReset()
{
    sysBaseInfo.endTime = 0;
    sysBaseInfo.sysSun = 200;
    sysBaseInfo.sysGold = SYS_GOLD_INIT;
    sysBaseInfo.sunflowerNum = 0;
    sysBaseInfo.diedSunflowerNum = 0;
    sysBaseInfo.beanshooterNum = 0;
    sysBaseInfo.diedBeanshooterNum = 0;
    sysBaseInfo.commonZombieNum = 0;
    sysBaseInfo.ironZombieNum = 0;
    sysBaseInfo.diedCommonZombieNum = 0;
    sysBaseInfo.diedIronZombieNum = 0;

    for(int i = 0; i < 2; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            grassArray[i][j] = NOTHING;
            zombieLife[i][j] = 3;
        }
    }
    api_defendsys_ret(OP_E_INIT_SUCCESS);
    return;
}

/* 收集阳光*/
void collectSun()
{
    printf("collect sun\n");
    if(sysBaseInfo.sysSun < SYS_SUN_UP_LIMIT_NUM)
    {
        sysBaseInfo.sysSun += sysBaseInfo.sunflowerNum * SUN_SELECTED;
    }

    if(sysBaseInfo.sysSun > SYS_SUN_UP_LIMIT_NUM)
    {
        sysBaseInfo.sysSun = SYS_SUN_UP_LIMIT_NUM;
    }
}

/* 产生僵尸*/
void generateZombie()
{
    if(sysBaseInfo.endTime%2 == 0)
    {
        grassArray[0][9] = COMMON_ZOMBIE;
        grassArray[1][9] = COMMON_ZOMBIE;
        sysBaseInfo.commonZombieNum += 2;
    }
}

/* 实际攻击僵尸*/
void realAttackZombies(int k, int i)
{
    if(grassArray[k][i] == BEAN_SHOOTER)
    {
        printf("BEAN_SHOOTER+++++++++:%d,%d,%d\n",k,i,grassArray[k][i]);//这东西很耗时的
        for(int j = i + 1; j < 10;j++)
        {
            if(grassArray[k][j] == COMMON_ZOMBIE)
            {
                if(zombieLife[k][j] == 1)
                {
                    sysBaseInfo.commonZombieNum -= 1;
                    sysBaseInfo.diedCommonZombieNum += 1;
                    grassArray[k][j] = NOTHING;
                    printf("zombieLife die=======sysTime======:%d,%d,%d\n",k,j,sysBaseInfo.endTime);//这东西很耗时的
                    zombieLife[k][j] = 3;//重新赋值为初始值
                    return;//确保一个豌豆射手每1h只攻击一次
                }
                zombieLife[k][j] -= 1;//bug_fix:
                return;
            }
        }
    }
}

/* 攻击僵尸*/
void attackZombie()
{
    for(int k = 0; k < 2; k++)
    {
        for(int i = 0; i < 9;i++)//豌豆只能在位置10之前
        {
            realAttackZombies(k,i);
        }
    }
}

/* 僵尸移动,移动时它的生命值也要跟着走,这就是两个2维数组的坏处*/
void moveZombie()
{
    //int isNewGen = (sysBaseInfo.endTime%2 == 0)?8:9;//新产生的下1h移动,9位置是新产生的
    int isNewGen = (sysBaseInfo.endTime%2 == 0)?9:10;//bug_fix:新产生的下1h移动,10位置是新产生的    

    for(int k = 0; k < 2; k++)
    {
        for(int i = 1; i < isNewGen; i++)//big_bug_fix:原来遍历方向反了
        {
            if(grassArray[k][i] == COMMON_ZOMBIE)
            {
                printf("move on %d,%d\n",k,i);
                if(grassArray[k][i-1] == SUN_FLOWER)
                {
                    sysBaseInfo.sunflowerNum -= 1;
                    sysBaseInfo.diedSunflowerNum += 1;
                }

                if(grassArray[k][i-1] == BEAN_SHOOTER)
                {
                    sysBaseInfo.beanshooterNum -= 1;
                    sysBaseInfo.diedBeanshooterNum += 1;
                }

                /* 优化,提取公共部分,僵尸前移一步*/
                grassArray[k][i-1] = COMMON_ZOMBIE;
                grassArray[k][i] = NOTHING;
                zombieLife[k][i-1] = zombieLife[k][i];
                zombieLife[k][i] = 3;//生命值置为初始值
            }
        }
    }
}

bool gameOver()
{
    if(sysBaseInfo.endTime == 30)
    {
        api_defendsys_ret_ext(OP_E_GAME_SUCCESS, sysBaseInfo);
        return true;
    }

    if(grassArray[0][0] == COMMON_ZOMBIE || grassArray[1][0] == COMMON_ZOMBIE)
    {
        api_defendsys_ret_ext(OP_E_GAME_OVER, sysBaseInfo);
        return true;
    }

    return false;
}
时间: 2024-10-11 22:53:29

PlantsVsZombies_v2.0_1的相关文章

小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点

1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍和高手系列知识点     简介:介绍SpringBoot2.x课程大纲章节         java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Springboot2

scrapy采集列表页的另一种方式

又是采集绿色下载站的最新软件,又是采用另一种方式(前两种是采用正则和xpath),呵呵 感觉有点像孔乙已的茴字有几种写法了 这回用CrawlSpider,Rule来配合采集 这次不用生成许多start_urls列表项了,可以按规则来自动读取,贴核心代码 # -*- coding: utf-8 -*- from scrapy.contrib.spiders import CrawlSpider,Rule from scrapy.selector import Selector from scrap

1007 正整数分组

0_1背包问题的变形,这是第一次的错解:DP时把每个物品体积设置为1,导致漏了一些结果. #include<iostream> #include<algorithm> #include<cstdio> #include<iomanip> #include<cmath> #include<vector> #include<string> using namespace std; typedef long long LL; #

转: javascript实现全国城市三级联动菜单代码

<html> <head> <title>js全国城市三级联动菜单代码_B5教程网</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script LANGUAGE="JavaScript"> function Dsy() { this.Items = {}; } Dsy

游戏开发中,图片资源的精简

在游戏开发中,包的大小总是与图片资源的大小密切相关,而图片资源中,大多为带有透明度信息的png图像. 那么,如何精简png图片资源呢? 1.图像压缩是一种方法,然而随着压缩率的增大.图片品质也越来越差.(舍弃) 2.我们另辟蹊径,采用png图像拆分.(近乎无损,资源精简) 一.原理:将png图像转化为两张jpeg图像进行存储 pngSplit下载 pngSplit使用说明 二.使用方法: 1.LibGdx中,通过Pixmap使用 // 如工程目录assets/texture/0_1.jpeg下:

访问svc 文件,编译器错误消息: CS0016,未能写入输出文件

编译错误              说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码.             编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\ncs.qms.apphost.branch\930ee5f1\66b34343\App_global.asax.dorw-abx.dll”

全国三级城市联动 js版

/* * 全国三级城市联动 js版 * author: mrasong * E-mail: mrasong#163.com * version: 1.0.2 * data: tencent **/ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; } Dsy.prototype.Exists = function(id){ if(typeof(t

BJQA-IIATF1.0框架之《自动生成有效请求Json串》

2017年7月28日,今天是一个里程碑的日子,根据参数及数值通过结对有效算法自动生成字典形式的测试用例功能模块完成,鼓掌,鼓掌! 替换postdata模板内指定元素值的代码如下: 1 import copy 2 import createPWtestcase 3 dicta ={ 4 "H": { 5 "ACID": "aaaaa", 6 "Ver": ["aaaa","bbbb"],

学点算法搞安全之apriori

前言 在企业安全建设专题中偶尔有次提到算法的应用,不少同学想深入了解这块,所以我专门开了一个子专题用于介绍安全领域经常用到的机器学习模型,从入门级别的SVM.贝叶斯等到HMM.神经网络和深度学习(其实深度学习可以认为就是神经网络的加强版). 关联规则挖掘 关联规则挖掘通常是无监督学习,通过分析数据集,挖掘出潜在的关联规则,最典型的一个例子就是尿布和啤酒的故事.相传沃尔玛的数据分析人员通过分析大量购物清单发现相当一部分消费者会同时购买尿布和啤酒,结果他们把尿布和啤酒赫然摆在一起出售,结果销量又双双