Do It Yourself (DIY) Memory


Allgemeine Informationen

Das Spielt wurde von uns selbst in der Programmiersprache c# erstellt und könnt Ihr direkt von unserer Cloud downloaden. Bei Interesse erhaltet Ihr auch auf Anfrage über unserer Kontaktformular den orginal Quelltext zum Spiel.


Inhaltsverzeichnis

Anleitung

Einrichten (DIY)

Spiele Memory als Offline-Spiel kann nach dem Download und ggf. entpacken direkt von deinem PC aus gestartet werden. Im Download enthalten sind hierbei auch die Beispiel-Bilddateien für das Spielfeld sowie das Spiel-Icon, Logo und das Bild für die Hidden-Card. Diese könnte Ihr bei Bedarf auch einfach gegen andere Bilder eurer Wahl austauschen. Das einzige was Ihr beibehalten müsst, ist die Namensgebung der Dateien, die Ihr in den Ordnern 'Memory_Pics' und 'Game_Pics' findet. Die Namensgebung für die Spielkarten ist wie folgt anzugeben.
Die Karten, die zusammen gehören, müssen immer nach folgendem Schema bzw Bildpaaren benannt werden:

  • Bildpaar 1: 1.jpg und 1_1.jpg
  • Bildpaar 2: 2.jpg und 2_1.jpg
  • Bildpaar 3: 3.jpg und 3_1.jpg
  • usw.
Hierbei ist der Inhalt der Bilddatei völlig egal. Wichtig ist nur, dass es zwischen 3 und max. 12 Bildpaare sind.

Spielen

Um das Spiel zu beginnen, könnt Ihr einfach auf die erste Karte klicken. Diese wird nun aufgedeckt und gelb markiert. Mit dem Klick auf die zweite Karte, wird diese ebenfalls aufgedeckt. Sind beide Karten, die aufgedeckt wurden identisch, bekommen diese einen Grünen Rahmen und bleiben jetzt auch für das gesamte weitere Spiel aufgedeckt. Sind die beiden Karten jedoch unterschiedlich, erhalten diese einen roten Rand und werden mit dem Aufdecken der nächsten Karte automatisch wieder verdeckt. Gewonnen ist das Spiel, wenn alle Karten grün sind. Am rechten Rand findet Ihr einen Counter, der eure Versuche zählt und am Ende eine Zusammenfassung anzeigt.

Viel Spaß beim Spielen.

Spielfeld

Installation

(Microsoft .NET Framework 4.7 erforderlich)

  • Zip-Datei 'DIY_Memory.zip' herunterladen und entpacken.
    Das Programm dann im entpackten Ordner über die Datei 'DIY-Memory.exe' ausführen.
  • Dateien und Ordner einzeln herunterladen und Spiel über die Datei DIY-Mermory.exe starten. (Wird mehr als eine Datei zum Download ausgewählt, werden diese als ZIP gepackt und zum download angeboten.)

Wichtiger Hinweis

Beim Download oder der Installation weist Microsoft unter Umständen darauf hin, dass das Programm von einem Unbekannten-Herausgeber ist. Das Programm lässt sich jedoch trotzdem Installieren.
Unter „Weiteren Informationen“ können Sie „Trotzdem ausführen“ auswählen. Um das Problem beim Download zu umgehen, können Sie auch einfach nur die *.zip herunterladen und entpacken.

1. Schritt

Nach dem Ausführen der Start-Datei kann die oben angezeigte Meldung erscheinen. Hier im Text auf 'Weitere Informationen klicken'

2.Schritt

Im Nächten Fenster, auf 'Trotzdem Ausführen' klicken.

(Zum vergrößern auf das jeweilige Bild klicken.)

Memory C# Quellcode

Der Quellcode musste etwas angepasst werden, dass er auf der Homepage richtig angezeigt und eingebunden werden kann.
Er kann somit nicht 1 zu 1 in Visual Studio übernommen werden (Zusätzliche Zeilenumbrüche).
Es fehlen auch sämtliche Objekte, die zum Ausführen des Quellcodes erforderlich sind.
Gerne kann ich euch das Original zukommen lassen. Schreibt mir hierzu einfach über das Kontaktformular.

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ECTR_Memory
{
  public partial class Form1 : Form
  {

    //Globale Variablen
    ArrayList ListPicFiles = new ArrayList();
    ArrayList ListRndNums = new ArrayList();
    string strFullPath = AppDomain.CurrentDomain.BaseDirectory + @"Memory_Pics";
    int[] arrintCompareCard = { -1, -1, -1 };
    int[] arrintPicBoxNum = { 0, 0 };
    bool intResultnOK = false; // 0=nOK; 1=OK; 2=Restart

    public Form1(){
      InitializeComponent();
      if (File.Exists(strFullPath + @"\Game_Pics\icon.ico")){
        this.Icon = new Icon(strFullPath + @"\Game_Pics\icon.ico");
      }
      if (File.Exists(strFullPath + @"\Game_Pics\logo.jpg")){
        PicBoxLogo.Image = Image.FromFile(strFullPath + @"\Game_Pics\logo.jpg");
      }
    }

    private void PictureBoxClick(object sender, EventArgs e){
      if (intResultnOK == true){
        intResultnOK = false;
        ((PictureBox)this.Controls["PicBox"+ arrintPicBoxNum[0]]).Image = ¶
				Image.FromFile(strFullPath + @"\Game_Pics\hidden_card.jpg");
        ((PictureBox)this.Controls["PicBox"+ arrintPicBoxNum[1]]).Image = ¶
				Image.FromFile(strFullPath + @"\Game_Pics\hidden_card.jpg");
        ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[0]]).BackColor = ¶
				Color.White;
        ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[1]]).BackColor = ¶
				Color.White;
        arrintPicBoxNum[0] = 0;
        arrintPicBoxNum[1] = 0;
      }
      if (sender is PictureBox){
        arrintPicBoxNum[0] = Int16.Parse((((PictureBox)sender).Name). ¶
				Replace("PicBox", ""));
        if (arrintPicBoxNum[0] != arrintPicBoxNum[1]) { 
          int intCrpytNum = (int)ListRndNums[arrintPicBoxNum[0] - 1];
          ((PictureBox)this.Controls["PicBox" + arrintPicBoxNum[0]]).Image = ¶
					Image.FromFile(strFullPath + @"\" + ListPicFiles[intCrpytNum]);
          ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[0]]).BackColor = ¶
					Color.Yellow;
          //Auswertung
          if (arrintCompareCard[0] == -1){
            arrintCompareCard[0] = intCrpytNum;
            arrintPicBoxNum[1] = arrintPicBoxNum[0];
          }else{
            if ((arrintCompareCard[0] % 2 == 1) || (arrintCompareCard[0] == 1)){
              //ungerade
              arrintCompareCard[1] = intCrpytNum;
              arrintCompareCard[2] = arrintCompareCard[0];
            }else{
              //gerade
              arrintCompareCard[1] = arrintCompareCard[0];
              arrintCompareCard[2] = intCrpytNum;
            }
            if (arrintCompareCard[2] == (arrintCompareCard[1] + 1)){
              //richtig              
              ((PictureBox)this.Controls["PicBox" + arrintPicBoxNum[0]]).Enabled ¶
							= false;
              ((PictureBox)this.Controls["PicBox" + arrintPicBoxNum[1]]).Enabled ¶
							= false;
              ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[0]]).BackColor ¶
							= Color.Green;
              ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[1]]).BackColor ¶
							= Color.Green;
              lblCardInGameValue.Text = Convert.ToString((Convert.ToInt16 ¶
							(lblCardInGameValue.Text) - 2));
            }else{
              //falsch
              intResultnOK = true;
              ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[0]]).BackColor ¶
							= Color.Red;
              ((Label)this.Controls["lblPicBox" + arrintPicBoxNum[1]]).BackColor ¶
							= Color.Red;
            }
            arrintCompareCard[0] = -1;
            lblCountValues.Text = Convert.ToString(Convert.ToInt16 ¶
						(lblCountValues.Text) + 1);
            if (lblCardInGameValue.Text == "0"){
              MessageBox.Show("Herzlichen Glückwunsch.\nDu hast alle " + ¶
							lblCountCardValue.Text + " Karten mit " + lblCountValues.Text + ¶
							" Zügen aufgedeckt.",
              "Gewonnen", MessageBoxButtons.OK);
            }
          }
        }
      }
    }

    private void Form1_SizeChanged(object sender, EventArgs e){
      int intFormWidth = this.ClientSize.Width;
      intFormWidth -= 240; //7*20 Pixel + 100 für Menü
      intFormWidth = intFormWidth / 6;

      int intFormHeight = this.ClientSize.Height;
      intFormHeight -= 100; //5*20 Pixel
      intFormHeight = intFormHeight / 4;

      int intNewSizePicbox;
      if (intFormHeight > intFormWidth){
        intNewSizePicbox = intFormWidth;
      }else{
        intNewSizePicbox = intFormHeight;
      }

      int intXLocation = 0;
      for (int i = 1; i <= 6; i++){
        intXLocation = (i * 20) + ((i - 1) * intNewSizePicbox);
        //ROW1
        this.Controls["PicBox" + i].Size = new Size ¶
				(intNewSizePicbox, intNewSizePicbox);
        this.Controls["PicBox" + i].Location = new Point ¶
				(intXLocation, 20);
        this.Controls["lblPicBox" + i].Size = new Size ¶
				(intNewSizePicbox + 10, intNewSizePicbox + 10);
        this.Controls["lblPicBox" + i].Location = new Point ¶
				(intXLocation - 5, 15);
        //ROW2
        this.Controls["PicBox" + (i + 6)].Size = new Size ¶
				(intNewSizePicbox, intNewSizePicbox);
        this.Controls["PicBox" + (i + 6)].Location = new Point ¶
				(intXLocation, (40 + intNewSizePicbox));
        this.Controls["lblPicBox" + (i + 6)].Size = new Size¶
				(intNewSizePicbox + 10, intNewSizePicbox + 10);
        this.Controls["lblPicBox" + (i + 6)].Location = new Point ¶
				(intXLocation - 5, (35 + intNewSizePicbox));
        //ROW3
        this.Controls["PicBox" + (i + 12)].Size = new Size ¶
				(intNewSizePicbox, intNewSizePicbox);
        this.Controls["PicBox" + (i + 12)].Location = new Point ¶
				(intXLocation, (60 + (2 * intNewSizePicbox)));
        this.Controls["lblPicBox" + (i + 12)].Size = new Size ¶
				(intNewSizePicbox + 10, intNewSizePicbox + 10);
        this.Controls["lblPicBox" + (i + 12)].Location = new Point ¶
				(intXLocation - 5, (55 + (2 * intNewSizePicbox)));
        //ROW4
        this.Controls["PicBox" + (i + 18)].Size = new Size ¶
				(intNewSizePicbox, intNewSizePicbox);
        this.Controls["PicBox" + (i + 18)].Location = new Point ¶
				(intXLocation, (80 + (3 * intNewSizePicbox)));
        this.Controls["lblPicBox" + (i + 18)].Size = new Size ¶
				(intNewSizePicbox + 10, intNewSizePicbox + 10);
        this.Controls["lblPicBox" + (i + 18)].Location = new Point ¶
				(intXLocation - 5, (75 + (3 * intNewSizePicbox)));
      }
      //Menü Groupbox
      MenüGroupBox.Location = new Point(140 + (6 * intNewSizePicbox), 20);
      MenüGroupBox.Size = new Size(this.ClientSize.Width - (160 + ¶
			(6 * intNewSizePicbox)), 60 + (4 * intNewSizePicbox));
      //Button Reset
      cmdReset.Size = new Size(MenüGroupBox.Width - 40, 50);
      cmdReset.Location = new Point(20, MenüGroupBox.Height - 80);
      //PicBoxLogo
      PicBoxLogo.Size = new Size(MenüGroupBox.Width - 20, 140);
      PicBoxLogo.Location = new Point(10, 20);
      //Label Count Card
      lblCountCard.Location = new Point(20, 180);
      lblCountCardValue.Location = new Point(lblCountCard.Width + 20, 180);
      //Label Card in Game
      lblCardInGame.Location = new Point(20, 220);
      lblCardInGameValue.Location = new Point(lblCardInGame.Width + 20, 220);
      //Label Counts
      lblCount.Location = new Point(20, 260);
      lblCountValues.Location = new Point(lblCount.Width + 20, 260);
      //lnkploesch
      lnkploesch.Location = new Point(20, MenüGroupBox.Height - 20);
    }

    private void cmdReset_Click(object sender, EventArgs e){
      Application.Restart();
      Environment.Exit(0);
    }

    private void LoadPicFiles(object sender, EventArgs e){
      if (!Directory.Exists(strFullPath)){
        MessageBox.Show("Der Ordner " + strFullPath + " wurde nicht gefunden.¶
				\nBitte Ordner erstellen und Memory-Bilder die zusammen gehören, ¶
				im Format 1.jpg --> 1_1.jpg, 2.jpg --> 2_1.jpg,... ablegen. ");
        Application.Exit();
      }
      if (File.Exists(strFullPath + @"\Game_Pics\hidden_card.jpg")){
        for (int i = 1; i <= 24; i++){
          ((PictureBox)this.Controls["PicBox" + i]).Image = ¶
					Image.FromFile(strFullPath + @"\Game_Pics\hidden_card.jpg");
        }
      }else{
        MessageBox.Show("Datei " + strFullPath + @"\Game_Pics\hidden_card.jpg ¶
				nicht vorhanden. Anwendung wird beendet.");
        Application.Exit();
      }
      int intIndexFor = 0;
      for (int i = 1; i <= 12; i++){
        if ((File.Exists(strFullPath + @"\" + i + ".jpg")) && ¶
				(File.Exists(strFullPath + @"\" + i + "_1.jpg"))){
          this.Controls["PicBox" + (i + intIndexFor)].Visible = true;
          intIndexFor++;
          this.Controls["PicBox" + (i + intIndexFor)].Visible = true;
          ListPicFiles.Add(i + ".jpg");
          ListPicFiles.Add(i + "_1.jpg");
        }else{
          if (i <= 2){
            MessageBox.Show("Keine oder zu wenig Bilder im Ordner ¶
						" + strFullPath + " vorhanden");
            Application.Exit();
          }
          break;
        }
      }
      CreateRnd();
      lblCardInGameValue.Text = Convert.ToString(ListPicFiles.Count);
      lblCountCardValue.Text = Convert.ToString(ListPicFiles.Count);
    }

    private void CreateRnd(){
      Random RndNums = new Random();
      int intRndNums = 0;
      int iDo = 0;
      do{
        intRndNums = RndNums.Next(0, ListPicFiles.Count);
        if (!ListRndNums.Contains(intRndNums)){
          iDo++;
          ListRndNums.Add(intRndNums);
        }
      } while (iDo < ListPicFiles.Count);
    }

    private void lnkploesch_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
      string target = "https://ploesch.de/index.php?side=g-diymemory";
      System.Diagnostics.Process.Start(target);
    }
  }
}

Download

Das Spielt wurde von uns selbst in der Programmiersprache c# erstellt und könnt Ihr direkt von unserer Cloud downloaden. Bei Interesse erhaltet Ihr auch auf Anfrage über unserer Kontaktformular den Quelltext zum Spiel.

Bitte Datenschutzerklärung beachten!

Vor, während und nach dem Spielen, werden Daten mit unserem Server ausgetauscht. In unserer Datenschutzerklärung erhaltet Ihr hierzu weitere Informationen.