我只是想知道如何在游戏中保存我的玩家的位置并将其加载回来?
我2个月前所做的只是将文本和数字保存到我个人系统的数据库(Access数据库)中。
我有另一种方法,即:“玩家在完成当前级别之前退出,然后当前级别未保存,除非玩家完成当前级别,然后将当前级别保存到数据库” ,“所以基本上就像Plant vs Zombie,当你没有完成当前阶段并且你在它中间退出时,当前阶段将不会为你保存,但前一阶段会被保存”。
但是,我无法使用这种方法,因为我制作了这样的游戏:“在游戏中(Side Scrolling 2D游戏),有一个门户允许玩家玩迷你游戏,当玩家完成玩迷你游戏,玩家将返回游戏,Side Scrolling 2D游戏再次出现,玩家位置在门户的前面。因为这两个是不同的游戏,我用Windows Forms做了所以,当玩家进入门户(迷你游戏)时,玩家在Side Scrolling 2D游戏中的玩家位置不会被保存。“
我想要完成的是:“当玩家进入门户时,玩家在侧面滚动时的位置将首先保存到数据库中,所以当玩家完成玩迷你游戏时,那么玩家位置仍位于门户网站的前面“
以下是我用于个人系统的保存代码:
private void AddDatabase(object sender, EventArgs e)
{
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\Point of Sales\Database\db1.accdb";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
string query = "INSERT INTO [Record] ([ProductCode], [Quantity], [Description], [SubTotal], [Total], [IssuedBy], [To], [Dates], [Times]) VALUES (@ProductCode, @Quantity, @Description, @SubTotal, @Total, @IssuedBy, @To, @Dates, @Times)";
string _query = "INSERT INTO [TransRecord] ([ProductCode], [Quantity], [Description], [SubTotal], [Total], [IssuedBy], [To], [Dates], [Times]) VALUES (@ProductCode, @Quantity, @Description, @SubTotal, @Total, @IssuedBy, @To, @Dates, @Times)";
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(query, conn))
{
cmd.Parameters.Add("@ProductCode", System.Data.OleDb.OleDbType.VarChar);
cmd.Parameters["@ProductCode"].Value = this.numericTextBox1.Text;
cmd.Parameters.Add("@Quantity", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["@Quantity"].Value = Convert.ToInt32(this.numericUpDown1.Value);
cmd.Parameters.Add("@Description", System.Data.OleDb.OleDbType.VarChar);
cmd.Parameters["@Description"].Value = this.textBox5.Text;
cmd.Parameters.Add("@SubTotal", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["@SubTotal"].Value = Convert.ToInt32(this.numericTextBox2.Text);
cmd.Parameters.Add("@Total", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["@Total"].Value = Convert.ToInt32(this.numericTextBox3.Text);
cmd.Parameters.Add("@IssuedBy", System.Data.OleDb.OleDbType.VarChar);
cmd.Parameters["@IssuedBy"].Value = this.textBox1.Text;
cmd.Parameters.Add("@To", System.Data.OleDb.OleDbType.VarChar);
cmd.Parameters["@To"].Value = this.textBox2.Text;
cmd.Parameters.Add("@Dates", System.Data.OleDb.OleDbType.Date);
cmd.Parameters["@Dates"].Value = this.textBox3.Text;
cmd.Parameters.Add("@Times", System.Data.OleDb.OleDbType.DBTimeStamp);
cmd.Parameters["@Times"].Value = DateTime.Now.ToShortTimeString();
cmd.ExecuteNonQuery();
using (OleDbCommand _cmd = new OleDbCommand(_query, conn))
{
_cmd.Parameters.Add("@ProductCode", System.Data.OleDb.OleDbType.VarChar);
_cmd.Parameters["@ProductCode"].Value = this.numericTextBox1.Text;
_cmd.Parameters.Add("@Quantity", System.Data.OleDb.OleDbType.Integer);
_cmd.Parameters["@Quantity"].Value = Convert.ToInt32(this.numericUpDown1.Value);
_cmd.Parameters.Add("@Description", System.Data.OleDb.OleDbType.VarChar);
_cmd.Parameters["@Description"].Value = this.textBox5.Text;
_cmd.Parameters.Add("@SubTotal", System.Data.OleDb.OleDbType.Integer);
_cmd.Parameters["@SubTotal"].Value = Convert.ToInt32(this.numericTextBox2.Text);
_cmd.Parameters.Add("@Total", System.Data.OleDb.OleDbType.Integer);
_cmd.Parameters["@Total"].Value = Convert.ToInt32(this.numericTextBox3.Text);
_cmd.Parameters.Add("@IssuedBy", System.Data.OleDb.OleDbType.VarChar);
_cmd.Parameters["@IssuedBy"].Value = this.textBox1.Text;
_cmd.Parameters.Add("@To", System.Data.OleDb.OleDbType.VarChar);
_cmd.Parameters["@To"].Value = this.textBox2.Text;
_cmd.Parameters.Add("@Dates", System.Data.OleDb.OleDbType.Date);
_cmd.Parameters["@Dates"].Value = this.textBox3.Text;
_cmd.Parameters.Add("@Times", System.Data.OleDb.OleDbType.DBTimeStamp);
_cmd.Parameters["@Times"].Value = DateTime.Now.ToShortTimeString();
_cmd.ExecuteNonQuery();
}
if (_choice.comboBox1.Text == "English")
{
System.Media.SoundPlayer _sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav");
_sound.Play();
DialogResult _dialogResult = MessageBox.Show("Added Successfully!", "Success", MessageBoxButtons.OK);
if (_dialogResult == DialogResult.OK)
{
UpdateQuantity(sender, e);
ViewDatabase(sender, e);
ClearTextBox(sender, e);
}
}
dataGridView1.ClearSelection();
}
conn.Close();
}
}
以上方法是否也适用于将玩家位置保存到Access数据库(本地数据库文件)?
谢谢。
您的回答将非常感谢!