人工智慧概論 坦克AI 498g0061-許顥.

Slides:



Advertisements
Similar presentations
第四章 类、对象和接口.
Advertisements

第一單元 建立java 程式.
项目7 面向对象高级.
项目6 通用堆栈.
報告書名:父母會傷人 班級:二技幼四甲 姓名:吳婉如 學號:1A2I0034 指導老師:高家斌
我征服了黃山 林達的黃山之旅 2006春.
人 工 智 慧 報 告 五子棋AI設計 報告者 : 潘輝銘.
媽,我們真的不一樣 青少年期與中年期 老師: 趙品淳老師 組員: 胡珮玟4A1I0006 馬菀謙4A1I0040
引導者的角色 組別:第5組 4A1I0003 劉芷媛 4A1I0004 陳安琪 4A1I0014 陳佳瑩 4A1I0046 葉倢茹
情緒與壓力管理─背部舒緩 指導老師:彭易璟 第六組組員:會資三乙 499A0047 謝宛霖 會資三乙 499A0019 吳汶諭
四資二甲 第三週作業 物件導向程式設計.
班級:二幼三甲 姓名:郭小瑄 、 詹淑評 學號:1A2I0029 、1A2I0025
第一章信託法 第一節 信託契約 第二節 信託財產 第三節 受益人 第四節 受託人 第五節 信託關係之消滅.
指導老師:楊淑娥 組別:第一組 成員:劉怡萱4a0i0066 吳珮瑜4a0i0070 林秋如4a0i0075 陳婉婷4a0i0076
組員:4A140013張瓊云 4A1I0039石宜芬 4A1I0909許峻綱 指導老師:王立杰老師
指導老師:陳韻如 姓名:吳宜珊 學號:4A0I0911 班級:幼保二乙
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
傳統童玩遊戲創新 組別:第八組 班級:幼保二甲 組員: 4A0I0005柯舒涵 4A0I0011謝孟真
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
類別與物件 Class & Object.
Ch07 介面與多重繼承 物件導向程式設計(II).
指導老師:陳韻如 班級:幼保二甲 姓名:林靜宜 學號:4A0I0033
第三章 控制结构.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
物件導向程式設計 (Object-Oriented rogramming)
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第三章 C#面向对象初级编程 面向对象得程序设计越来越受到编程人员的喜爱。类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性是面向对象的特点,本章旨在全面说明C#编写面向对象程序设计的方法。
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计期末复习 黎金宁
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
C#面向对象程序设计 $7 继承和多态性.
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
Java程序设计 第2章 基本数据类型及操作.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
資訊學科中心研習 JAVA程式設計專題 臺北市立大理高級中學 黃世隆 2019/2/23.
第六章 属性、索引器、委托和事件.
第一單元 建立java 程式.
第2章 MATLAB程序设计 编者.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
补充:c#语言基础.
C#程序设计基础 $3 成员、变量和常量.
王豐緒 銘傳大學資訊工程學系 問題:判斷是否為長方形.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
本节内容 对象拷贝 视频提供:昆山爱达人信息技术有限公司.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
#include <iostream.h>
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
第二章 Java基本语法 讲师:复凡.
網路資源的應用-抓圖 李俊賢.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
Android Speech To Text(STT)
C# 匿名委派 + Lambda + Func 建國科技大學 資管系 饒瑞佶.
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 学习网站:
第2章 Java语言基础.
05 方法. 05 方法 5.1 方法 在一個較大型的程式中,通常會將具有特定功能或經常重複使用的程式,撰寫成獨立的小單元,稱為「方法」(Method),並賦予方法一個名稱,當程式需要時就可以呼叫此方法來執行該段特定程式。(此種重複使用的程式小單元在其他語言中可能稱為程序、副程式或函式, Visual.
本节内容 在堆中创建对象 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

人工智慧概論 坦克AI 498g0061-許顥

主題-坦克大戰 運用程式的運作,簡單的做出坦克車之間的射擊遊戲同時還使用人工智慧的方法,使遊戲能夠更靈活多樣。 運用簡單的WASD以及J,來擊敗電腦(NPC)過關。

程式碼-電腦AI private static Image[] imgEnemy1 = new Image[] Resources.enemy1U, Resources.enemy1D, Resources.enemy1L, Resources.enemy1R }; private static Image[] imgEnemy2 = new Image[] { Resources.enemy2U, Resources.enemy2D, Resources.enemy2L, Resources.enemy2R private static Image[] imgEnemy3 = new Image[] Resources.enemy3U, Resources.enemy3D, Resources.enemy3L, Resources.enemy3R private int type; //定义敌人的类型 public int Type //设置属性 get { return Type; } set { Type = value; } }

private static int speed; //定义速度和生命力值 private static int life; private Random rdm = new Random();//定义随机数,来控制敌人出现的不同方向 //設置速度 private static int SetSpeed(int type) { switch (type) case 0: speed = 5; break; case 1: speed = 3; case 2: speed = 8; } return speed; //返回速度值 //設置生命

private static int SetLife(int type) { switch (type) case 0: life = 4; break; case 1: life = 6; case 2: life = 7; } return life; //返回速度值 //构造方法,用来实例化敌人对象 public Enemy(int x,int y,int type,directions dir) :base(x,y,SetLife(type),imgEnemy1[0].Width,imgEnemy1[0].Height,SetSpeed(type),dir) this.type = type; Beborn(); //構造出生用 //構造敵人隨機方向

public void EnemyAI() { if (rdm.Next(0, 100) < 2) switch(rdm.Next(0,4)) case 0: dir = directions.U; break; case 1: dir = directions.D; case 2: dir = directions.L; case 3: dir = directions.R; } //重写Move方法

public override void Move() { EnemyAI(); //先判斷隨機方向,然后再讓他移動 Adjustdirection(); if (this.X > 720 || this.X < 0 || this.Y > 720 || this.Y < 0) //如果剛好在四個邊界,隨機賦予的一個方向 switch (rdm.Next(0, 4)) case 0: dir = directions.U; break; case 1: dir = directions.D; case 2: dir = directions.L; case 3: dir = directions.R; } base.Move();//调用基类的Move方法 //重写绘制方法

public override void Draw(Graphics g) { if (BornTimer < 48) //在閃耀效果加載前不能移動 BornTimer++; return; } Move();//调用Move方法 switch (type) //先判斷類型,再判斷方向,再確定圖片的加載 case 0: switch (dir) case directions.U: g.DrawImage(imgEnemy1[0], this.X, this.Y); break; case directions.D: g.DrawImage(imgEnemy1[1], this.X, this.Y); case directions.L: g.DrawImage(imgEnemy1[2], this.X, this.Y); case directions.R: g.DrawImage(imgEnemy1[3], this.X, this.Y);

case 1: switch (dir) { case directions.U: g.DrawImage(imgEnemy2[0], this.X, this.Y); break; case directions.D: g.DrawImage(imgEnemy2[1], this.X, this.Y); case directions.L: g.DrawImage(imgEnemy2[2], this.X, this.Y); case directions.R: g.DrawImage(imgEnemy2[3], this.X, this.Y); } case 2: g.DrawImage(imgEnemy3[0], this.X, this.Y); g.DrawImage(imgEnemy3[1], this.X, this.Y); g.DrawImage(imgEnemy3[2], this.X, this.Y); g.DrawImage(imgEnemy3[3], this.X, this.Y);

if (rdm.Next(0, 10) < 3) //使敵人隨機發射子弹 { Fire(); } //敵人開火方法 public override void Fire() Singleton.Instance.AddElement(new EnemyMissile(this, 1, 15, 3)); //对象.生命.速度.威力 //给敌人添加死亡的方法 public void IsDead() if (this.Life == 0) // Sound soundBlast = new Sound(Resources.blast); // soundBlast.Play(); Singleton.Instance.AddElement(new Blast(this.X - 25, this.y - 25)); Singleton.Instance.RemoveElement(this); //给敌人添加出生的方法 public override void Beborn() Singleton.Instance.AddElement(new Born(this.X, this.Y));

#region 判斷我的子彈是否打到敵人坦克 for (int i = 0; i < myMissile.Count; i++) { for (int j = 0; j < enemy.Count; j++) try if (myMissile[i].GetRectangle().IntersectsWith(enemy[j].GetRectangle())) enemy[j].Life -= myMissile[i].power; enemy[j].IsDead(); myMissile.Remove(myMissile[i]); } catch

THE END