扩展属性

有外键关系时将信息处理成用户可看懂的

利用扩展属性

如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称

需要在Info类里面扩展一个显示nation名称的属性

例:先前在NationDA里面已经下好了一个代号换成名称的方法

    public class Info
{
//扩展的名族名称属性
public string NationName
{
get {
NationDA da = new NationDA();
return da.NationName(this.nation);//this关键字,该对象里面是不是有一个nation
}
}

配置文件(App.config)

换台电脑、数据库名不同时,为了让别的用户也可以运行,把数据连接写在配置文件中,方便修改

例:

App.config中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
//key 配置名称
<appSettings>
<add key="connstring" value="server=.;database=mydb;user=sa;pwd=123"/>
</appSettings>
</configuration>

数据连接类中:

    public class DBConnect
{
private static string connstring = System.Configuration.ConfigurationSettings.AppSettings["connstring"]; public static SqlConnection Conn
{
get {
return new SqlConnection(connstring);
}
}
}

低版本可以用该方法,高版本可以根据提示更改:

对战游戏

要求:

  1. 自建数据表(例如:数据表包含:代号,姓名,性别,血量,攻击力,防御力,命中,闪避,等级等字段)
  2. 需要通过程序向数据表添加人员
  3. 添加的时候,根据用户输入的名字,自动计算生成相应的血量、攻击力、防御力等(例如,名字的前两个字作为种子生成血量,名字的第一个字作为种子生成攻击力,名字的第二个字作为种子生成防御力等)
  4. 添加完成用户可以输入两个用户进行对战
  5. 通过程序逻辑实现对战双方的血量变化并显示(使用随机数浮动攻击防御)
  6. 最终血量先到达0的失败,胜利的一方属性增加(比如等级level加1,血量加一些,攻击力加一些等)
  7. 访问数据库采用三个类的模式

数据连接类:

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 扩展属性、配置文件 和 对战游戏的更多相关文章

  1. ADO.net 扩展属性

    扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:users表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在users类里面扩展 ...

  2. ADO.Net(四)——扩展属性和配置文件应用

    一.扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展 ...

  3. ADO.NET 【属性扩展】性别、年龄、编号

    1.性别属性扩展 private bool _Sex; //成员变量 public bool Sex // 属性 { get { return _Sex; } set { _Sex = value; ...

  4. Ado.net 类扩展属性

    .要扩展的类名字一样,2个类加(partial) 小例子: using System; using System.Collections.Generic; using System.Linq; usi ...

  5. [NewLife.XCode]扩展属性(替代多表关联Join提升性能)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  6. linux中suid/sgid/sticky及扩展属性(attr)

    suid只适用于命令文件.(如/usr/bin/passwd) 当命令文件上有suid权限时,则操作用户的权限变成属主权限.命令文件上无suid权限则操作用户的权限不变. 查看suid权限: [roo ...

  7. SQL SERVER中的扩展属性

    以前在SQL SERVER建表时,总看到扩展属性,但一直未使用过.今天研究下: 增加扩展属性: 语法: sp_addextendedproperty [ @name = ] { 'property_n ...

  8. 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样

    申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...

  9. ADO.Net(五)——实战:对战游戏

    对战游戏 要求: 自建数据表(例如:数据表包含:代号,姓名,性别,血量,攻击力,防御力,命中,闪避,等级等字段) 需要通过程序向数据表添加人员 添加的时候,根据用户输入的名字,自动计算生成相应的血量. ...

随机推荐

  1. C#WinForm中复制、粘贴文本到剪贴板

    //复制: private void button1_Click(object sender, System.EventArgs e) {   if(textBox1.SelectedText != ...

  2. Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper

    异步消息处理机制解析 Android中的异步消息处理主要有四个部分组成,Message.Handler.MessageQueue和Looper. 1.Message Message是在线程之间传递的消 ...

  3. memcache和memcached之间的区别和联系

    memcache和memcached区别: Memcache是什么?Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速动态web应用程序,减轻数据库负载.它可以应对任意多 ...

  4. X-004 FriendlyARM tiny4412 uboot移植之点亮指路灯

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  5. HDU 1255 覆盖的面积 ——(线段树+扫描线)

    又做了一题扫描线以后对节点的覆盖标记理解的更加深刻了. 代码如下: #include <stdio.h> #include <algorithm> #include <s ...

  6. 远程开户系统开放API接口

    如今随着智能识别技术的成熟和商用,金融领域也开始逐渐试水"远程开户".从OCR身份证识别到人脸识别,到如今市场上即将出现完整的远程开户系统,除了需要成熟的技术做支撑外,还需要对市场 ...

  7. CSS实现导航条Tab切换的三种方法

    前面的话   导航条Tab在页面中非常常见,本文说详细介绍CSS实现导航条Tab的三种方法 布局   根据上图所示,先规定几个定义,上图的模块整体叫做导航,由导航标题和导航内容组成.要实现上图所示的布 ...

  8. Spark中的键值对操作-scala

    1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,Pa ...

  9. webpack之代码分离

    https://robertknight.github.io/posts/webpack-dll-plugins/ webpack一般会把一个文件里import/require的文件都会打包在一起,最 ...

  10. xshell安装运行时提示缺少mfc110.dll

    下载最新的mfc110.dll文件 https://pan.baidu.com/share/link?shareid=1932421734&uk=1784696518&app=zd 之 ...