Anfägerfrage: ein minimalistisches Spiel

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von jok3r89.

    Anfägerfrage: ein minimalistisches Spiel

    Hallo,
    kurz zu mir ich hab schon ein wenig erfahrungen mit anderen Sprachen und Oberflächen gemacht. Muss mich aber beruflich absofort mit Visual Studio beschäftigen, und hab mir gedacht ich programmier gleich mal ein kleines Spiel.
    Kurz um es gibt eine Klasse aus der ein Array[][] erzeugt wird das einem Spielefeld enstpricht.
    Mein Problem ist eigentlich , wie verbinde ich das Object mit dem View item.
    Macht man das so ein form item aus einder klasse heraus zu erzeuegen oder gibt es eine bessere möglichkeit ?

    Ich habs mir so vorgestellt in dieser Klasse ein form item zu erzeugen ...

    C#-Quellcode

    1. class spot
    2. {
    3. private System.Windows.Forms.PictureBox spotPicture;
    4. private Player m_player;
    5. public spot()
    6. {
    7. spotPicture.BackColor = System.Drawing.Color.WhiteSmoke;
    8. }
    9. public void setSpot(Player player)
    10. {
    11. m_player = player;
    12. switch (player)
    13. {
    14. case Player.one:
    15. spotPicture.BackColor = System.Drawing.Color.Green;
    16. break;
    17. case Player.two:
    18. spotPicture.BackColor = System.Drawing.Color.Yellow;
    19. break;
    20. default:
    21. spotPicture.BackColor = System.Drawing.Color.Empty;
    22. break;
    23. }
    24. }
    25. public Player getSpot()
    26. {
    27. return m_player;
    28. }
    29. public void Reset()
    30. {
    31. spotPicture.BackColor = System.Drawing.Color.WhiteSmoke;
    32. }


    Gruß

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jok3r89“ ()

    Grundsätzlich sollte man sich ein geeignetes Datenmodell ausdenken:
    Fang mal an ein Interface zu erstellen, welches die wichtigsten Eigenschaften und Methoden hat, welche in Spielelement braucht, dass in deinem Game vorkommen soll. Im Normalfall sind das folgende Dinge:
    - Die Koordinate des Items
    - Eine Bezeichnung/ID/Namen
    - Darstellungs-Atribut(Image, Farbe)
    - Zeichnen-Methode
    - Update-Methode

    Diese Sachen solltest du wie gesagt in einem Interface definieren. Dieses kannst dann in Klassen verewigen, von denne du dann weiter Ableitungen erstellst.

    Das wichtigst wird aber die Zeichnen Methode sein. Diese Methode ist dafür verantwortlich, dass du auch was sehen kannst. In dieser Methode passiert die eigentliche "Magie". Hier kannst du dir dann als Parameter ein Graphics-Objekt geben lassen, mit welchem du die Figuren auf der Form zeichne lassen kannst. Dafür bitte keine Picturebox verwenden.

    Picturebox ist ein Control. Controls sind zur Anzeige von Daten da, nicht, um als Daten missbraucht zu werden!

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Vielen dank für deine Antwort, ich kam dir mit ein paar punkten gleich zuvor es gibt schon eine neuere Version

    C#-Quellcode

    1. enum Player
    2. {
    3. one,
    4. two,
    5. }
    6. interface spotInterface
    7. {
    8. void setSpot(Player player);
    9. void Reset();
    10. void update(Graphics g);
    11. }
    12. class spot : spotInterface
    13. {
    14. private Player m_player;
    15. private int m_posX = 0;
    16. private int m_posY = 0;
    17. private Graphics m_viewItem;
    18. private Color m_color= Color.Empty;
    19. public spot(int x ,int y)
    20. {
    21. m_posX = x;
    22. m_posY = y;
    23. m_color = System.Drawing.Color.WhiteSmoke;
    24. }
    25. public void setSpot(Player player)
    26. {
    27. m_player = player;
    28. switch (player)
    29. {
    30. case Player.one:
    31. m_color = System.Drawing.Color.Green;
    32. break;
    33. case Player.two:
    34. m_color = System.Drawing.Color.Yellow;
    35. break;
    36. default:
    37. m_color = System.Drawing.Color.Empty;
    38. break;
    39. }
    40. }
    41. public Player getSpot()
    42. {
    43. return m_player;
    44. }
    45. public void Reset()
    46. {
    47. m_color = System.Drawing.Color.WhiteSmoke;
    48. }
    49. public void update(Graphics g)
    50. {
    51. }
    52. }

    Zum thema Graphics-Objekt , ich hab wirklich grad noch keine ahnung hör davon zum ersten mal.... mal sehen was ich so finde.
    Gruß

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jok3r89“ ()

    C#-Quellcode

    1. public static class GraphicsExtensions
    2. {
    3. public static void DrawCircle(this Graphics g, Pen pen, float centerX, float centerY, float radius)
    4. {
    5. g.DrawEllipse(pen, centerX - radius, centerY - radius,
    6. radius + radius, radius + radius);
    7. }
    8. public static void FillCircle(this Graphics g, Brush brush, float centerX, float centerY, float radius)
    9. {
    10. g.FillEllipse(brush, centerX - radius, centerY - radius,
    11. radius + radius, radius + radius);
    12. }
    13. }
    14. enum Player
    15. {
    16. one,
    17. two,
    18. }
    19. interface spotInterface
    20. {
    21. void setSpot(Player player);
    22. void Reset();
    23. void update();
    24. }
    25. class Spot : spotInterface
    26. {
    27. private Player m_player;
    28. private int m_posX;
    29. private int m_posY;
    30. private int m_size;
    31. private Graphics m_viewItem;
    32. private Color m_color;
    33. private Pen m_pen;
    34. private float m_lineWidth;
    35. public Spot(Graphics g, int x ,int y)
    36. {
    37. m_posX = x;
    38. m_posY = y;
    39. m_size = 50;
    40. m_lineWidth = 1;
    41. m_color = System.Drawing.Color.WhiteSmoke;
    42. m_pen = new Pen(m_color, m_lineWidth);
    43. m_viewItem = g;
    44. m_viewItem.DrawCircle(m_pen, m_posX, m_posY, m_size);
    45. }
    46. public void setSpot(Player player)
    47. {
    48. m_player = player;
    49. switch (player)
    50. {
    51. case Player.one:
    52. m_color = System.Drawing.Color.Green;
    53. break;
    54. case Player.two:
    55. m_color = System.Drawing.Color.Yellow;
    56. break;
    57. default:
    58. m_color = System.Drawing.Color.Empty;
    59. break;
    60. }
    61. }
    62. public Player getSpot()
    63. {
    64. return m_player;
    65. }
    66. public void Reset()
    67. {
    68. m_color = System.Drawing.Color.WhiteSmoke;
    69. }
    70. public void update()
    71. {
    72. Brush brush = new SolidBrush(m_color);
    73. m_viewItem.FillCircle(brush, m_posX, m_posY, m_size);
    74. }
    75. }


    Wenn ich das von dir richtig interpretiert habe sollte es dann so sein ? Gruß

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „jok3r89“ ()