保存玩家位置c#

时间:2014-01-28 14:20:36

标签: c# winforms save

我只是想知道如何在游戏中保存我的玩家的位置并将其加载回来?

我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数据库(本地数据库文件)?

谢谢。

您的回答将非常感谢!

0 个答案:

没有答案