ADO.Net(五)——实战:对战游戏
对战游戏
要求:
- 自建数据表(例如:数据表包含:代号,姓名,性别,血量,攻击力,防御力,命中,闪避,等级等字段)
- 需要通过程序向数据表添加人员
- 添加的时候,根据用户输入的名字,自动计算生成相应的血量、攻击力、防御力等(例如,名字的前两个字作为种子生成血量,名字的第一个字作为种子生成攻击力,名字的第二个字作为种子生成防御力等)
- 添加完成用户可以输入两个用户进行对战
- 通过程序逻辑实现对战双方的血量变化并显示(使用随机数浮动攻击防御)
- 最终血量先到达0的失败,胜利的一方属性增加(比如等级level加1,血量加一些,攻击力加一些等)
- 访问数据库采用三个类的模式
数据连接类:
namespace ConsoleApplication1
{
public class DBConnect
{
private static string connstring = System.Configuration.ConfigurationSettings.AppSettings["connstring"];
public static SqlConnection Conn
{
get
{
return new SqlConnection(connstring);
}
}
}
}
实体类:
namespace ConsoleApplication1
{
public class Player
{
private string name;
//玩家姓名
public string Name
{
get { return name; }
set { name = value; }
}
private bool sex;
//玩家性别
public bool Sex
{
get { return sex; }
set { sex = value; }
}
private int lev;
//玩家等级
public int Lev
{
get { return lev; }
set { lev = value; }
}
private int blood;
//血量
public int Blood
{
get { return blood; }
set { blood = value; }
}
private int attack;
//攻击
public int Attack
{
get { return attack; }
set { attack = value; }
}
private int defense;
//防御
public int Defense
{
get { return defense; }
set { defense = value; }
}
private int hit;
//命中
public int Hit
{
get { return hit; }
set { hit = value; }
}
private int dodge;
//闪避
public int Dodge
{
get { return dodge; }
set { dodge = value; }
}
}
}
数据访问类:
namespace ConsoleApplication1
{
public class PlayerDA
{
private SqlConnection _conn;
private SqlCommand _cmd;
private SqlDataReader _dr;
public PlayerDA()
{
_conn = DBConnect.Conn;
_cmd = _conn.CreateCommand();
}
//添加人员
public bool AddPlayer(string name_p, bool sex_p)
{
//初始属性
Player p = new Player();
int seed = (int)Convert.ToChar(name_p.Substring(, )) + (int)Convert.ToChar(name_p.Substring(, ));
Random rand = new Random(seed);
p.Lev = ;
p.Blood = + rand.Next();
p.Attack = + rand.Next();
p.Defense = + rand.Next();
p.Hit = + rand.Next();
p.Dodge = + rand.Next();
//添加
_cmd.CommandText = "insert into Player values(@name,@sex," + p.Lev + "," + p.Blood + "," + p.Attack + "," + p.Defense + "," + p.Hit + "," + p.Dodge+ ")";
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@name", name_p);
_cmd.Parameters.AddWithValue("@sex", sex_p);
_conn.Open();
int add = _cmd.ExecuteNonQuery();
_conn.Close();
if (add > )
{
return true ;
}
else
{
return false;
}
}
//查询
public List<Player> Select(string name_p)
{
_cmd.CommandText = "select *from Player where Name=@name";
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@name", name_p);
_conn.Open();
_dr = _cmd.ExecuteReader();
List<Player> list = new List<Player>();
if (_dr.HasRows)
{
while (_dr.Read())
{
Player data = new Player();
data.Name = _dr[].ToString();
data.Sex =Convert.ToBoolean(_dr[]);
data.Lev = Convert.ToInt32(_dr[]);
data.Blood = Convert.ToInt32(_dr[]);
data.Attack = Convert.ToInt32(_dr[]);
data.Defense = Convert.ToInt32(_dr[]);
data.Hit = Convert.ToInt32(_dr[]);
data.Dodge = Convert.ToInt32(_dr[]);
list.Add(data);
}
}
_conn.Close();
return list;
} //修改
public bool Update(string name)
{
List<Player> list = Select(name);
list[].Lev += ;
list[].Blood += ;
list[].Attack += ;
list[].Defense += ;
list[].Hit += ;
list[].Dodge += ;
_cmd.CommandText = "update Player set Lev=" + list[].Lev + ",Blood=" + list[].Blood + ",Attack=" + list[].Attack + ",Defense=" + list[].Defense + ",Hit=" + list[].Hit + ",Dodge=" + list[].Dodge + " where Name=@name";
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@name", name);
_conn.Open();
int n = _cmd.ExecuteNonQuery();
_conn.Close();
if (n > )
{
return true;
}
else
{
return false;
}
}
}
}
添加人物:
namespace ConsoleApplication1
{
class program1
{
static void Main1(string[] args)
{
while (true)
{
Console.WriteLine("请输入姓名:");
string name = Console.ReadLine();
Console.WriteLine("请输入性别:");
bool sex = Console.ReadLine() == "男" ? true : false;
PlayerDA da = new PlayerDA();
if (da.AddPlayer(name, sex))
{
Console.WriteLine(name + "的属性信息为:");
List<Player> list = da.Select(name);
foreach (Player data in list)
{
string ssex = data.Sex ? "男" : "女";
Console.WriteLine("姓名:" + data.Name + "\t" + "性别:" + data.Sex + "\t" + "等级:" + data.Lev + "\t" + "血量:" + data.Blood + "\t" + "攻击:" + data.Attack + "\t" + "防御:" + data.Defense + "\t" + "命中:" + data.Hit + "\t" + "闪避:" + data.Dodge + "\t");
}
}
else
{
Console.WriteLine("添加人物失败!");
}
Console.WriteLine("是否继续添加人物?Y or N");
string yn = Console.ReadLine();
if (yn == "Y")
{
}
else
{
Console.WriteLine("输入完毕");
break;
}
}
Console.ReadLine();
}
}
}
对战:
namespace ConsoleApplication1
{
class program
{
//攻击函数
static Player gj(Player p_1, Player p_2)
{
Random rand = new Random();
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine(p_1.Name + "准备发起攻击... ...");
Console.ForegroundColor = ConsoleColor.Black; System.Threading.Thread.Sleep();
int h2 = rand.Next() + p_1.Hit;
int d1 = rand.Next() + p_2.Dodge;
if (h2 > )
{
if (d1 > )
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(p_2.Name + "躲开了" + p_1.Name + "的攻击");
Console.ForegroundColor = ConsoleColor.Black;
}
else
{
int sh = rand.Next() + p_1.Attack;
p_2.Blood = p_2.Blood - sh + p_2.Defense;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(p_1.Name + "攻击掉" + p_2.Name + (sh - p_2.Defense) + "血");
Console.ForegroundColor = ConsoleColor.Black;
}
}
else
{
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(p_1.Name + "攻击失误");
Console.ForegroundColor = ConsoleColor.Black;
}
return (p_2);
}
static void Main(string[] args)
{
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.Black; PlayerDA da = new PlayerDA();
Console.Write("请输入第一个玩家的姓名:");
string Name_1 = Console.ReadLine(); List<Player> p1 = da.Select(Name_1);
Console.WriteLine("*************************"); Console.Write("请输入第二个玩家的姓名:");
string Name_2 = Console.ReadLine(); List<Player> p2 = da.Select(Name_2);
Console.WriteLine("*************************"); //pk阶段
while (p1[].Blood > && p2[].Blood > )
{
Player pp2 = gj(p1[],p2[]);
p2[] = pp2;
Player pp1 = gj(p2[],p1[]);
p1[] = pp1;
Console.WriteLine(p2[].Name + ":"+(p2[].Blood<?:p2[].Blood)+"————————"+p1[].Name+":"+(p1[].Blood<?:p1[].Blood));
Console.WriteLine();
Console.WriteLine();
System.Threading.Thread.Sleep();
}
//pk结束
Console.WriteLine("**********战斗结束**********");
Console.WriteLine();
if (p1[].Blood <= && p2[].Blood > )
{
Console.WriteLine(p2[].Name + "赢了,恭喜升了一级!");
Console.WriteLine("属性提升为:");
if (da.Update(Name_2))
{
List<Player> list = da.Select(Name_2);
foreach (Player data in list)
{
string ssex = data.Sex ? "男" : "女";
Console.WriteLine("姓名:" + data.Name + "\t" + "性别:" + ssex + "\t" + "等级:" + data.Lev + "\t" + "血量:" + data.Blood + "\t" + "攻击:" + data.Attack + "\t" + "防御:" + data.Defense + "\t" + "命中:" + data.Hit + "\t" + "闪避:" + data.Dodge + "\t");
}
}
else
{
Console.WriteLine("错误!");
}
}
else if (p2[].Blood <= && p1[].Blood > )
{
Console.WriteLine(p1[].Name + "赢了,恭喜升了一级!");
Console.WriteLine("属性提升为:");
if (da.Update(Name_1))
{
List<Player> list = da.Select(Name_1);
foreach (Player data in list)
{
string ssex = data.Sex ? "男" : "女";
Console.WriteLine("姓名:" + data.Name + "\t" + "性别:" + ssex + "\t" + "等级:" + data.Lev + "\t" + "血量:" + data.Blood + "\t" + "攻击:" + data.Attack + "\t" + "防御:" + data.Defense + "\t" + "命中:" + data.Hit + "\t" + "闪避:" + data.Dodge + "\t");
}
}
else
{
Console.WriteLine("错误!");
}
}
else if (p1[].Blood<=&&p2[].Blood<=)
{
Console.WriteLine("同归于尽!");
}
Console.ReadLine();
}
}
}
ADO.Net(五)——实战:对战游戏的更多相关文章
- HTML5+JS 《五子飞》游戏实现(八)人机对战
要想实现人机对战,就必须让电脑自动下棋,而且要知道自动去查找对方的棋子,看看有没有可以挑一对的,有没有可以夹一个的,这样下起来才有意思. 当电脑用户下完棋后,电脑应立即搜索用户的棋子,然后如果没有被吃 ...
- ADO.NET 扩展属性、配置文件 和 对战游戏
扩展属性 有外键关系时将信息处理成用户可看懂的 利用扩展属性 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 例:先前 ...
- HTML5+JS 《五子飞》游戏实现(七)游戏试玩
前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:ht ...
- C#小游戏(文字对战游戏)
第一代,不是很完善,会在后续增加更多的功能 主: using System; using System.Collections.Generic; using System.Linq; using Sy ...
- HTML5+JS 《五子飞》游戏实现(一)规则
很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种 ...
- HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择
上一章我们提到了如果有多条线上的棋子可以被吃掉,那么游戏需要提示用户,让用户选择吃哪条线上的.另外因为是网页游戏,所以一定要实现鼠标单击棋子可以进行操作. 当鼠标移动棋子上面后,切换鼠标指针为手形,移 ...
- HTML5+JS 《五子飞》游戏实现(五)移动棋子
上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子.现在里沃特跟大家分享分享,怎么移动棋子. 想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位 ...
- HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对
在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 thi ...
- HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子
前面两节,我们已经对<五子飞>有个初步的认识,对走棋路线也有了基本的了解,现在里沃特继续跟大家分享HTML页面,另外把棋盘棋子也画出来. 演示地址:http://www.lyout.com ...
随机推荐
- oracle11g的standby性能分析报告statpack安装
一般常见的分析standby database的性能问题的方法就是通过动态性能视图来判断,从11g开始,随着Active Data Guard功能的出现,早期的Statspack 工具可以在stand ...
- C ~ 链式队列与循环队列
此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...
- android app自动化测试之UIAutomator
一.UIAutomator Android自动化测试工具有很多,但是要免费.易上手,本人觉得就直接使用Eclipse自带的UIAutomator就不错.测试人员无需跟开发要代码信息,只要手机上有安装之 ...
- Java ConcurrentModificationException异常原因和解决方法
Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...
- 去掉Mybatis Generator生成的一堆 example
<table tableName="%" enableInsert="true" enableDeleteByPrimaryKey="true& ...
- EasyUI-datagrid数据展示+MongoDB数据操作
使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...
- 第 14 章 CSS 颜色与度量单位
学习要点: 1.颜色表方案 2.度量单位 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 颜色和度量单位等问题,包括颜色的选取方式.相对长度和绝对长度等. 一.颜色表方案 颜色的表现形式主要有 ...
- Spring4学习笔记 - Bean的生命周期
1 Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1)通过构造器或工厂方法创建 Bean 实例 2)为 Bean 的属性设置值和对其他 Bean 的引用 3)调用 Bean 的初 ...
- Glide.js:响应式 & 触摸友好的 jQuery 滑块插件
Glide.js 是一款响应式和对触摸友好的 jQuery 滑块.基于 CSS3 转换实现,并在低版本浏览器降级处理.Glide.js 简单,重量轻,快速,适用于智能手机,平板电脑和台式机.它支持 s ...
- Web 开发最有用的50款 jQuery 插件集锦——《综合篇》
这篇文章是<Web 开发最有用的50款 jQuery 插件集锦>系列的最后一篇,整个系列向大家分享了在网站开发中非常有帮助的 50 款 jQuery 插件,这些插件按用途主要有以下类别:网 ...