两个窗体的性能和资源重新分配使用情况,而一个窗体带有切换情况

本文关键字:窗体 情况 用情 一个 性能 两个 资源 分配 新分配 | 更新日期: 2023-09-27 18:24:44

我正在编写一个没有鬼魂的简单pacman游戏。所以只有一个象征作为玩家,一些墙壁和物品。

现在我想选择是自己用箭头键玩游戏,还是自动解决。用户玩游戏的形式是完整的。现在,我应该创建一个新的Form(Paint事件和Load事件的代码相同),只更改必须更改的内容,还是应该通过切换案例决定将所有代码放在一个Form中?

我通过PreviewKeyDown事件捕获目录,并将其保存到字符串变量"direction"中。然后启动计时器来降低玩家的一般移动速度。

 private void Game_Form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        //Unterscheide nach Richtung und kontrolliere ob in dieser Richtung Wand ist
        switch (e.KeyCode)
        {
            case Keys.Up:
                if (maze[pos_player_index.Item1, pos_player_index.Item2 - 1] == '#')
                {
                    break;
                }
                else
                {
                    key = "up";
                }
                break;
           .
           . 
           .
            }
        //Starte Timer Bewegungsgeschwindigkeit t_move
        t_move.Start();
    }

然后在OnTickEvent中,我决定如何处理玩家的符号,并检查是否有墙。然后我为玩家呼叫刷新。迷宫本身只在全局绘制事件中,因此只绘制一次。

void t_move_Tick(对象发送方,EventArgs e){//Hilfsvariable的Richtung Unterscheiden der Richtung(例如Möglichkeit的Komentieren)开关(钥匙){

            case "up":
                    //Setzen des neuen Index
                    pos_player_index = new Tuple<int, int>(pos_player_index.Item1, pos_player_index.Item2 - 1);
                    //Überschreiben des Zeichens im Labyrinth durch Leerzeichen -> aufgesammelt
                    maze[pos_player_index.Item1, pos_player_index.Item2] = ' ';
                    //Neuzeichnen der Spielfigur
                    p_player.Refresh();
                    break;

因此,图形和控制的代码是完全不同的。

两个窗体的性能和资源重新分配使用情况,而一个窗体带有切换情况

正如其他人所提到的,复制代码是个坏主意——突然之间,您将不得不实现两次所有更改

有许多方法可以分离程序中的功能。

目前,最简单的方法是使当前表单成为执行"共享"功能的abstract class PacmanForm,并具有class UserPacmanForm : PacmanFormclass RobotPacmanForm : PacmanForm

但是我不认为winforms设计器那么喜欢抽象类。如果您希望能够使用设计器,请在尝试之前创建项目的备份

另一种选择是将公共代码移动到一个单独的PacmanGame类,例如,该类具有以下方法:

  • 构造函数,可能是您当前在Form.Load事件处理程序中的代码
  • 一种渲染游戏的Render(Graphics g)方法
  • 处理移动的Move(Direction d)方法

然后,您可以创建两个单独的表单,这两个表单都使用PacmanGame实例。

PS。我在回答中没有把重点放在性能上,因为性能在这里不是问题。瓶颈很可能是绘制游戏的代码。

相关文章: