zoukankan      html  css  js  c++  java
  • 坦克大战游戏步骤 思路 与代码(一)

    坦克大战步骤

    1.首先创建一个父类,设置好高度、宽度、左、中间的属性 创建一个构造方法、将这些参数传递,将这些值赋予到父类中
    并且在父类中构建一个重画的虚拟类。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing;

    namespace WindowsFormsApplication1
    {
    public abstract class GameObject //在父类中定义抽象类,在父类中规定,在子类中实现
    {

    public int Width { get; set; }
    public int Heigth { get; set; }
    public int Left { get; set; }
    public int Top { get; set; }
    public GameObject(int width,int height,int left,int top)

    {

    this.Width = width;
    this.Heigth = height;
    this.Left = left;
    this.Top = top;

    }

    public abstract void Draw(Graphics g);//从窗体中传一个对象才能开始画

    }
    }


    2.然后再建立一个会动的类 并且创建速度和方向 从父类继承高宽等属性,并且定义自己的属性。再定义一个方向的方法
    public abstract class ActivityGameObject:GameObject //活动类也是抽象的,并不知道如何绘图
    {

    public int Spend { get; set; }//速度
    public Dirction Dir { get; set; }//方向
    public ActivityGameObject (int width,int height,int left,int top,int spend,Dirction Dir):base(width,height,left,top)
    {

    this.Spend = spend; //通过父类的引用将这些数据传给子类,子类再定义自己的属性
    this.Dir = Dir;

    }
    public virtual void Move()
    {

    switch (this.Dir)
    {


    case Dirction.Up: this.Top -= Spend; break; //判断方向
    case Dirction.Down: this.Top += Spend; break;
    case Dirction.Left: this.Left -= Spend; break;
    case Dirction.Rigth: this.Left += Spend; break;


    }


    }
    }

    public enum Dirction
    {

    Up,
    Left,
    Down,
    Rigth


    }
    }

    3.再创建一个坦克类 继承活动类 定义生命 和四个方向的图片 将父类继承的东西全部继承 在坦克类重写方向
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing;

    namespace WindowsFormsApplication1
    {
    public class Tank:ActivityGameObject //坦克类继承活动的类
    {

    public int Life { get; set; } //生命
    private Image[] images; //坦克的四个方向的图片
    public Tank(Image[] images, int left, int top, int spend, int life, Dirction dir)
    : base(images[0].Width, images[0].Height, left, top, spend, dir)
    {
    //构造坦克的图片数据,并在父类中继承

    this.Left = left;
    this.images = images;



    }
    public override void Draw(Graphics g)
    {


    switch (this.Dir)
    {


    case Dirction.Up: g.DrawImage(images[0], this.Left, this.Top); break; //位置是第一0个,则是当前的位置
    case Dirction.Down: g.DrawImage(images[1], this.Left, this.Top); break;
    case Dirction.Left: g.DrawImage(images[2], this.Left, this.Top); break;
    case Dirction.Rigth: g.DrawImage(images[3], this.Left, this.Top); break;

    }

    }

    }
    }
    4.创建一个玩家坦克继承坦克类
    创建对象之前静态初始化坦克的图片,并且将值传给坦克类
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing;
    using WindowsFormsApplication1.Properties;

    namespace WindowsFormsApplication1
    {

    public class playerTank : Tank //玩家坦克
    {

    private static Image[] images = new Image[] //创建对象之前的静态初始化

    {

    Resources.p1tankU,
    Resources.p1tankD,
    Resources.p1tankL, //玩家坦克向父类传递一组图片
    Resources.p1tankR






    };
    public playerTank(int left, int top, int spend, int life, Dirction dir)
    : base(images, left, top, spend, life, dir) //传递
    {

    }
    }
    }

    5.创建一个所有对象管理员的类
    首先创建一个单例让管理员成为唯一,创建一个玩家属性,添加游戏对象并且验证将它转成玩家,方向的也传递的同事,并且调用玩家坦克的方向方法
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing;

    namespace WindowsFormsApplication1
    {
    public class GameObjectManager
    {
    private GameObjectManager() { }
    private static GameObjectManager gom=null;
    public static GameObjectManager GetInstance()
    {

    if (gom == null)
    {

    gom = new GameObjectManager();
    }
    return gom;

    }
    private playerTank pltank;

    public playerTank Pltank
    {
    get { return pltank; }
    set { pltank = value; }
    }
    //添加游戏对象
    public void Add(GameObject go) //如果扔给一个玩家坦克,转成玩家坦克,并且赋予管理者
    {

    if (go is playerTank)
    {
    Pltank= go as playerTank;

    }

    }
    public void Draw(Graphics g)

    {

    pltank.Draw(g);

    }

    5.窗体在构建的时候将坦克的图片构造方法传递

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    this.InitGame();
    }

    public void InitGame()
    {

    playerTank pltank = new playerTank(200,200,10,10,Dirction.Up); //将参数传递
    GameObjectManager.GetInstance().Add(pltank);


    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {

    GameObjectManager.GetInstance().Draw(e.Graphics);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

    this.Invalidate();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
    playerTank tank= GameObjectManager.GetInstance().Pltank;
    switch (e.KeyCode)
    {

    case Keys.W: tank.Dir = Dirction.Up; tank.Move(); break;
    case Keys.S: tank.Dir = Dirction.Down; tank.Move(); break;
    case Keys.A: tank.Dir = Dirction.Left; tank.Move(); break;
    case Keys.D: tank.Dir = Dirction.Rigth; tank.Move(); break;

    }
    }

    }
    }

  • 相关阅读:
    熟悉常用的Linux操作
    组合数据类型练习
    简易的词法分析程序
    大数据概述
    201552040205 关于对java的体验与感悟
    对已学习的java内容的一些感悟
    关于java中的一些小技巧
    Javase 大纲2
    Javase大纲
    MysQL知识整理
  • 原文地址:https://www.cnblogs.com/liyiyong/p/5124947.html
Copyright © 2011-2022 走看看