zoukankan      html  css  js  c++  java
  • 【游戏编程从0开始】一、基本结构

    说明

    此文中的游戏编程与游戏引擎无关,使用LUA编程语言,主要是一些我在学习实践中了解到的一些基本的常识,在此稍微小结一下。

    基本结构

    变量
    函数
    初始化
    主循环
        检查外部输入
        更新游戏数据
        更新画面
        检查游戏是否结束
    

    变量

    在这里定义游戏中用到的大多数变量。比如分辨率,游戏角色的初始数据,道具、怪物等结构的数据。不一定所有的都定义在这里,但是那种贯穿整个游戏比较重要的数据还是放在程序开头的好。

    举个栗子

    WIDTH=240
    HEIGHT=136
    
    LEVEL=1
    DIFFICULTY=1
    
    PLAYER=
    {
        maxhp=30,
        atk=10,
        spd=2
    }
    
    

    函数

    在这里放游戏中会使用到的函数,将游戏中所有的功能抽象细化成函数,便于修改和阅读,减少代码重复率。

    比如

    --创建矩形
    function newRect(w,h,x,y) 
        return {w=w,h=h,x=x,y=y}
    end
    --判断两个矩形是否重叠
    function isColli(rect1,rect2)
        if rect1.x<rect2.x+rect2.w and 
           rect2.x<rect1.x+rect1.w and    
           rect1.y<rect2.y+rect2.h and
           rect2.y<rect1.y+rect1.h 
        then
            return true 
        else
            return false 
        end 
    end
    

    初始化

    初始化在游戏编程中非常重要。它是程序在进入一个新的状态(循环)之前所必须做的准备工作。比如点击START GAME之后开始新一轮的游戏,就必需在此之前重置所有用到的变量。

    例如

    function init()
        SCORE=0
        PLAYER.x=0
        PLAYER.y=0
        PLAYER.hp=0
        LIVES=3
    end
    

    主循环

    整个游戏代码都在这里运行,一般都是每秒运行固定次数,比如一秒循环60次。

    大概长这样

    function LOOP()
        if mode==1 then
            playerMove()
            EnemiesMove()
            
            if collision(player,enemy) then
                player.dead=true
            end
            
            drawScreen()
            
            if player.dead then
                print("GAME OVER")
                counter=180
                mode=2
            end
        else
        if mode==2 then
            counter=counter-1
            if counter<0 then
                init()
                mode=1
            end
        end
    end
    

    其中的内容就需要去自己填充了。

    结语

    以上就是对一个游戏代码基本结构的简单介绍,当然并不局限于此,在此就不继续深入了。

  • 相关阅读:
    物理初中电学套题犯傻题整理
    Ansible之playbook语法
    Ansible之安装-使用aliyun的epel源
    Ansible之批量执行简单指令
    Ansible之配置文件ansible.cfg
    k8s之harbor私有镜像仓库部署
    Ansible之inventory资源清单
    centos7 二进制部署kubernetes(v1.19.0) 高可用集群
    react用ref之坑 (react中findDOMNode)
    iOS开发申请组播广播权限
  • 原文地址:https://www.cnblogs.com/ark2000/p/11377430.html
Copyright © 2011-2022 走看看