C#语言俄罗斯方块源代码(据陈广老师视频)

 

以下是我根据陈广老师视频,自己敲的代码,日后会不断更新

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

namespace Tetris
{
    public partial class FrmConfig : Form
    {
        public FrmConfig()
        {
            InitializeComponent();
        }

        private bool[,] struArr=new bool[5,5];      //此处bool值数组应用不明白,怎么会返回一个bull值呢?
        private Color blockColor = Color.Red;

        private void lblMode_Click(object sender, EventArgs e)
        {

        }

        private void lblMode_Paint(object sender, PaintEventArgs e)
        {
            Graphics gp = e.Graphics;
            gp.Clear(Color.Black);
            Pen p = new Pen(Color.White);
            for (int i = 31; i < 155; i = i + 31)
                gp.DrawLine(p, 1, i, 155, i);
            for (int i = 31; i < 155; i = i + 31)
                gp.DrawLine(p, i, 1, i, 155);
            SolidBrush s = new SolidBrush(blockColor);
            for (int x = 0; x < 5;x++ )
            {
                for (int y = 0; y < 5;y++ )
                {
                    if (struArr[x,y])
                    {
                        gp.FillRectangle(s, 31 * x + 1, 30 * y + 1, 30, 30);
                    }
                }
            }
        }

        private void lblMode_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
                return;
            int xPos, yPos;
            xPos = e.X / 31;
            yPos = e.Y / 31;
            struArr[xPos, yPos] = !struArr[xPos, yPos];
            bool b = struArr[xPos, yPos];                 // 此处不解?
            Graphics gp = lblMode.CreateGraphics();
            SolidBrush s = new SolidBrush(b?blockColor:Color.Black);
            gp.FillRectangle(s, 31 * xPos + 1, 30 * yPos + 1, 30, 30);
            gp.Dispose();
        }

        private void lblColor_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            blockColor = colorDialog1.Color;
            lblColor.BackColor = colorDialog1.Color;
            lblMode.Invalidate();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            bool isEmpty = false;
            foreach (bool i in struArr)
            {
                if (i)
                {
                    isEmpty = true;
                    break;
                }
            }
            if (!isEmpty)
            {
                MessageBox.Show("图案为空","提示窗口",MessageBoxButtons.OK,MessageBoxIcon.Information);
                return;
            }
            StringBuilder sb = new StringBuilder(25);
            foreach (bool i in struArr)
            {
                sb.Append(i?"1":"0");
            }
            string blockString = sb.ToString();
            foreach (ListViewItem item in lsvBlockSet.Items)
            {
                if(item.SubItems[0].Text==blockString)
                {
                    MessageBox.Show("图案已经存在", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
            }
            ListViewItem myItem = new ListViewItem();
            myItem = lsvBlockSet.Items.Add(blockString);
            myItem.SubItems.Add(Convert.ToString(blockColor.ToArgb()));
        }

        private void lsvBlockSet_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (e.IsSelected)
            {
                blockColor = Color.FromArgb(int.Parse(e.Item.SubItems[1].Text));
                lblColor.BackColor = blockColor;
                string s = e.Item.SubItems[0].Text;
                for (int i = 0; i < s.Length;i++ )
                {
                    struArr[i / 5, i % 5] = (s[i] == '1') ? true : false;
                }
                lblMode.Invalidate();
            }
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            if(lsvBlockSet.SelectedItems.Count==0)
            {
                MessageBox.Show("请在右边选择一个条目进行删除!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            lsvBlockSet.Items.Remove(lsvBlockSet.SelectedItems[0]);
            btnClear.PerformClick();
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            for (int x = 0; x < 5;x++ )
            {
                for (int y = 0; y < 5; y++)
                {
                    struArr[x, y] = false;
                }
            }
            lblMode.Invalidate();
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            if (lsvBlockSet.SelectedItems.Count == 0)  //判断是否有项目被选中
            {
                MessageBox.Show("请在右边选择一个条目进行修改!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            bool isEmpty = false;   //判断图案是否为空
            foreach(bool i in struArr)
            {
                if(i)
                {
                    isEmpty = true;
                    break;
                }
            }
            if(!isEmpty)
            {
                 MessageBox.Show("图案为空,请先用鼠标点击左边图案再进行修改!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 return;
            }

            StringBuilder sb = new StringBuilder(25);
            foreach(bool i in struArr)   //把图案的字符串信息转换为二维数组信息
            {
                sb.Append(i?"1":"0");
            }
            lsvBlockSet.SelectedItems[0].SubItems[0].Text = sb.ToString();  //改变图案信息
            lsvBlockSet.SelectedItems[0].SubItems[0].Text = Convert.ToString(blockColor.ToArgb());  //改变颜色信息
        }
    }
}

转载于:https://www.cnblogs.com/vincent316/archive/2008/08/01/1258460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值