堡垒之夜英文
當前位置:堡垒之夜英文 - 老照片 >

手机堡垒之夜下载地址:Python單機游戲—亂世君臨(入庫篇)

2019-05-27來源:中國商融網

堡垒之夜英文 www.vqieh.icu     上一篇我們實現了英雄的自動生成與手動創建,接下來我們就應該將生成的英雄屬性存入到我們的mysql數據庫中。

    首先我們在配置文件conf.cfg中寫入mysql信息

# MysqlDB配置文件
[MYSQL_DB]
host = 127.0.0.1
port = 3306
user = username
passwd = password
charset = utf8

    按照各自的mysql地址、端口、用戶名和密碼進行修改,之后我們打開GetConn中的get_conn()方法進行數據庫連接。

def get_conn(db):
"""
   獲取配置文件的內容來創建數據庫連接
   @ cp 讀取配置文件
   @ host 數據庫地址
   @ port 數據庫端口
   @ user 數據庫用戶名
   @ passwd 數據庫密碼
   @ charset 數據庫編碼
   @ conn 創建數據庫連接
   :param db: 需要連接的數據庫名稱
   :return: conn 數據庫連接
   """
   # 分別從配置文件中讀入mysql配置信息
   cp = configparser.ConfigParser()
cp.read('./conf.cfg', encoding='utf-8')
host = cp.get('MYSQL_DB', 'host')
port = int(cp.get('MYSQL_DB', 'port'))
user = cp.get('MYSQL_DB', 'user')
passwd = cp.get('MYSQL_DB', 'passwd')
charset = cp.get('MYSQL_DB', 'charset')
# 異??刂?br>    try:
# 創建數據庫連接
       conn = pymysql.connect(
host=host,
           port=port,
           user=user,
           passwd=passwd,
           db=db,
           charset=charset
)
# 返回數據庫連接對象
       return conn
except Exception as e:
print(e)

  我們從配置文件conf.cfg中讀入mysql的配置信息,然后使用pymysql(python2中使用MySQL-python)來創建數據庫連接,并定義conn來接收創建的數據庫連接對象并返回,因為后面的所有數據庫操作都將使用這個conn來完成。

    接下來我們在mysql數據庫中使用'create database hero_era_2;'命令創建一個數據庫,這個數據庫名將作為我們創建數據庫連接時傳入的參數db。

# 調用GetConn中的get_conn()方法獲取一個數據庫連接對象
self.conn = Conn.get_conn('hero_era_2')

    然后我們需要創建heroes表,用于存儲所有英雄信息

def create_hero_table(conn):
"""
   重建英雄數據表
   用于新游戲時,清空上一場游戲數據內容,重新生成英雄數據表
   :param conn: 數據庫連接對象
   :return: None
   """
   # 獲取數據庫操作游標
   cursor = conn.cursor()
# SQL刪除英雄表
   drop_sql = 'DROP TABLE IF EXISTS heroes;'
   # SQL創建英雄表
   create_sql = '''
       CREATE TABLE heroes (
           h_id INT(10) NOT NULL AUTO_INCREMENT COMMENT '英雄ID',
           h_group INT(10) DEFAULT 0 COMMENT '所屬勢力ID',
           h_name VARCHAR(10) COLLATE utf8_bin DEFAULT NULL COMMENT '英雄姓名',
           h_gender VARCHAR(10) COLLATE utf8_bin DEFAULT NULL COMMENT '英雄性別',
           h_age INT(10) DEFAULT NULL COMMENT '英雄年齡',
           h_identity VARCHAR(10) COLLATE utf8_bin DEFAULT NULL COMMENT '英雄身份',
           h_lead INT(10) DEFAULT NULL COMMENT '英雄統率',
           h_force INT(10) DEFAULT NULL COMMENT '英雄武力',
           h_brain INT(10) DEFAULT NULL COMMENT '英雄智力',
           h_politics INT(10) DEFAULT NULL COMMENT '英雄政治',
           h_charm INT(10) DEFAULT NULL COMMENT '英雄魅力',
           h_status INT(10) DEFAULT 1 COMMENT '英雄狀態',
           PRIMARY KEY (h_id),
           KEY (h_group)
       ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
   '''
   try:
# 執行SQL
       cursor.execute(drop_sql)
cursor.execute(create_sql)
except Exception as e:
print(e)
# 事務回滾
       conn.rollback()

    這里使用到了SQL語句創建表,并設定h_id作為主鍵,序列自增;設定英雄勢力h_group默認值為0,即未加入任何勢力;設定英雄狀態h_status默認值為1,即在野狀態;設定外鍵為h_group;設定編碼為utf-8。

    另外使用了事務回滾rollback()函數,其作用是在數據庫執行操作出錯時保證數據庫不做更改,這樣能很好地?;な菘庵械氖薟換崾艿醬砦蟛僮韉撓跋?。

    最后我們還需要實現將數據插入到數據庫表,同樣在GetConn中找到insert_data()方法

def insert_data(data, t_name, conn):
"""
   向數據庫中插入數據
   @ conn 接收由get_conn()返回的conn這個數據庫連接
   @ cursor 數據庫操作游標,用于數據庫操作
   @ keys 拼接SQL語句,值是student字典中所有的key
   @ values 拼接SQL語句,值是student字典中所有的value
   @ sql 拼接需要執行的SQL語句
   :param data: 插入數據字典
   :param t_name: 操作表名稱
   :param conn: 數據庫連接對象
   :return: None
   """
   keys = ''
   values = ''
   cursor = conn.cursor()
# 遍歷字典中所有的key和value并分別接收拼接
   for key, value in data.items():
keys = keys + '{},'.format(key)
values = values + '"{}",'.format(value)
sql = 'INSERT INTO {0}({1}) VALUES({2})'.format(
t_name, keys[:-1], values[:-1]
)
# 異??刂?br>    try:
# 執行SQL語句并提交事務
       cursor.execute(sql)
conn.commit()
except Exception as e:
print(e)
# 事務回滾
       conn.rollback()

    在這里我們定義了一個keys用來接收拼接數據庫字段,values用來接收拼接數據的值,因為我們傳過來的hero_data是一個字典,且字典的key和heroes表中的字段一一對應,所以我們以這樣的方式減少了SQL語句的復雜度,且可以通用于整個程序的數據插入操作。

    該方法需要傳入一個t_name參數,作為連接的數據庫中需要操作的數據表名,并使用了commit()函數進行事務提交。這里需要注意的是,如果我們不使用整個commit()函數,則數據不會被寫入數據表中。

    到這里我們的數據庫英雄部分的入庫準備已經完成,那么接下來我們就回到Hero_Era去將這幾個部分結合起來,實現英雄的自動創建與入庫。

    導入GetConn用于數據庫操作并定義別名為Conn:

from Hero_Era_Pro2 import GetConn as Conn

    創建數據庫連接對象:

self.conn = Conn.get_conn('hero_era_2')

    新建一個英雄表:

Conn.create_hero_table(self.conn)

    導入Hero_Builder用于英雄創建并定義別名為HB:

from Hero_Era_Pro2 import Hero_Builder as HB

    調用auto_create_hero()方法自動創建英雄,并指定英雄數為10:

HB.auto_create_hero(self.conn, 10)

    讓玩家可以選擇自動創建英雄:

choice = int(input('1 新建英雄  2 選擇勢力\n'))

    調用new_hero()方法新建一個英雄:

HB.new_hero(self.conn)

    最后一步,分別在Hero_Builder中的auto_create_hero()和new_hero()中添加一個數據庫插入操作,并傳入生成的英雄屬性。當然,我們需要在Hero_Builder中導入GetConn。

from Hero_Era_Pro2 import GetConn as Conn
Conn.insert_data(hero_data, 'heroes', conn)

    到這里我們就完成了英雄自創建到入庫的所有操作,讓我們驗證一下:

    沒問題,那我們再去看看mysql數據庫的heroes表中是否插入了這些數據。

    我們可以看到數據庫中也出現了所有的英雄數據信息,且h_group和h_status的值分別為我們設定的默認值0和1,另外生成的英雄數也是我們所指定的10人,他們的h_id則自動從1開始增長到了10。

    至于我們新建的英雄林妹妹,則是在new_hero()中指定了其h_id為500,用以區別。

hero_data['h_id'] = 500

    本篇到此結束,下一篇將從以上數據中隨機選出兩人作為勢力主公實現勢力的創建。

    需要本篇源碼的讀者請關注公眾號并回復“Hero_Era_Pro”自動獲取源碼地址。

    感謝閱讀,歡迎繼續關注~

轉載文章地址://www.vqieh.icu/laozhaopian/1061.html
(本文來自強者必自強整合文章://www.vqieh.icu)未經允許,不得轉載!
標簽:
網站簡介 聯系我們 堡垒之夜英文 網站地圖

版權所有:堡垒之夜英文 www.vqieh.icu ?2017 強者必自強

強者必自強提供的所有內容均是網絡轉載或網友提供,本站僅提供內容展示服務,不承認任何法律責任。