오늘은 Windows Forms를 이용하여

 

수학 퀴즈 앱을 만들어 보았다.

 

참고 공식 문서는 

 

https://learn.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-windows-forms-create-match-game?view=vs-2022

 

Tutorial: Create a matching game - Visual Studio (Windows)

Create a game where a player matches icons, and start by creating a project in Visual Studio by using C# or VB Windows Forms and add layout.

learn.microsoft.com

 

를 참고 했다.

 

 

+++

 

 

 

실행 이미지

 

 

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

namespace MatchingGame
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            AssignIconsToSquares();
        }

        Label firstClicked = null;
        Label secondClicked = null;


        Random random = new Random();

        List<string> icons = new List<string>()
    {
        "A", "A", "B", "B", "C", "C", "D", "D",
        "E", "E", "F", "F", "G", "G", "H", "H"
    };

        private void AssignIconsToSquares() // 문자 할당 메서드
        {

            foreach (Control control in tableLayoutPanel1.Controls)
            {
                Label iconLabel = control as Label;
                if (iconLabel != null)
                {
                    int randomNumber = random.Next(icons.Count);
                    iconLabel.Text = icons[randomNumber];
                    iconLabel.ForeColor = iconLabel.BackColor;
                    icons.RemoveAt(randomNumber);
                }
            }
        }

        private void label1_Click(object sender, EventArgs e) // Label 클릭 메서드
        {

            if (timer1.Enabled == true)
                return;

            Label clickedLabel = sender as Label;

            if (clickedLabel != null)
            {

                if (clickedLabel.ForeColor == Color.Black)
                    return;

                if (firstClicked == null)
                {
                    firstClicked = clickedLabel;
                    firstClicked.ForeColor = Color.Black;
                    return;
                }


                secondClicked = clickedLabel;
                secondClicked.ForeColor = Color.Black;

                CheckForWinner();

                if (firstClicked.Text == secondClicked.Text)
                {
                    firstClicked = null;
                    secondClicked = null;
                    return;
                }

                timer1.Start(); // 첫번째, 두번째가 같지 않다면 타이머 시작
            }
        }

        private void timer1_Tick(object sender, EventArgs e) // 틀렸을경우 다시 되돌리기 (1 간격마다 실행되는 메서드)
        {

            timer1.Stop();


            firstClicked.ForeColor = firstClicked.BackColor;
            secondClicked.ForeColor = secondClicked.BackColor;


            firstClicked = null;
            secondClicked = null;
        }

        private void CheckForWinner() // 두 레이블이 같다면 축하 메세지 출력
        {
            foreach (Control control in tableLayoutPanel1.Controls)
            {
                Label iconLabel = control as Label;

                if (iconLabel != null)
                {
                    if (iconLabel.ForeColor == iconLabel.BackColor)
                        return;
                }
            }

            MessageBox.Show("모든 문자를 맞췄습니다!", "축하합니다!");
            Close();
        }
    }

  
}

 

실행 코드

 

 

 

+ Recent posts