`
zmo_xu
  • 浏览: 63611 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

逐步讲解用C#实现俄罗斯方块之核心代码[完结篇]

阅读更多
这里先给出shape类的所有代码
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using System.Text;

namespace Fang
...{
    
public class sharp
    
...{
        
//用于记录分数
        
//用于记录已经触底的图像
        protected PictureBox[] oldpb=new PictureBox[1000];
        
//用于控制移动中的图像
        public PictureBox[] pb = new PictureBox[4];
        
//图像的初始化位置
        private int initX = 100;
        
private int initY = 10;

        
//构造函数[参数用于制定控件添加到什么窗口]
        public sharp(Form f)
        
...{
            newObj(f);
        }


        
//用于给定时器调用 向下移动
        public void moveDown(Form f)
        
...{
            
for (int i = 0; i < 4; i++)
            
...{
                
//向下移动
                pb[i].Location = new Point(pb[i].Location.X, pb[i].Location.Y + 10);
            }

            
//调用check来判断是否到底 
            if (check(f))
            
...{
                
//到底着构建新图像
                makeNew();
            }

        }


        
//用于旋转图形
        public void Roll()
        
...{
           
            
int Sx = pb[2].Location.X - pb[0].Location.X;
            
int Sy = pb[2].Location.Y - pb[0].Location.Y;
            
//根据计算
            if         (Sx >= 0 && Sy < 0) Rollx(-1,-1);
            
else if (Sx < 0 && Sy <= 0) Rollx(-1,1); 
            
else if (Sx <= 0 && Sy > 0) Rollx(1,1);
            
else if (Sx > 0 && Sy >= 0) Rollx(1,-1);
        }


        
//ROllX()由下面的4个方法综合而成

        
/**/////四个象限的旋转方法
        //private void Roll1()//在第一象限转第二象限
        
// {
        
//     for (int i = 1; i < 4; i++)
        
//     {
        
//         int x = System.Math.Abs(pb[0].Location.X - pb[i].Location.X);
        
//         int y = System.Math.Abs(pb[0].Location.Y - pb[i].Location.Y);
        
//         pb[i].Location = new Point(pb[0].Location.X - y, pb[0].Location.Y - x);
        
//     }
        
//     //如果坐标越界就进行反旋转
        
//     if (pb[0].Location.X > 200 || pb[1].Location.X > 200 || pb[2].Location.X > 200 || pb[3].Location.X > 200) Roll4();
        
//     if (pb[0].Location.X < 0 || pb[1].Location.X < 0 || pb[2].Location.X < 0 || pb[3].Location.X < 0) Roll4();
        
// }
        
// private void Roll2()//在2转3
        
// {
        
//     for (int i = 1; i < 4; i++)
        
//     {
        
//         int x = System.Math.Abs(pb[0].Location.X - pb[i].Location.X);
        
//         int y = System.Math.Abs(pb[0].Location.Y - pb[i].Location.Y);
        
//         pb[i].Location = new Point(pb[0].Location.X - y, pb[0].Location.Y + x);
        
//     }
        
//     //如果坐标越界就进行反旋转
        
//     if (pb[0].Location.X < 0 || pb[1].Location.X < 0 || pb[2].Location.X < 0 || pb[3].Location.X < 0) Roll1();
        
//     if (pb[0].Location.X > 200 || pb[1].Location.X > 200 || pb[2].Location.X > 200 || pb[3].Location.X > 200) Roll1();
        
// }
        
// private void Roll3()//在3转4
        
// {
        
//     for (int i = 1; i < 4; i++)
        
//     {
        
//         int x = System.Math.Abs(pb[0].Location.X - pb[i].Location.X);
        
//         int y = System.Math.Abs(pb[0].Location.Y - pb[i].Location.Y);
        
//         pb[i].Location = new Point(pb[0].Location.X + y, pb[0].Location.Y + x);
        
//     }
        
//     //如果坐标越界就进行反旋转
        
//     if (pb[0].Location.X < 0 || pb[1].Location.X < 0 || pb[2].Location.X < 0 || pb[3].Location.X < 0) Roll2();
        
//     if (pb[0].Location.X > 200 || pb[1].Location.X > 200 || pb[2].Location.X > 200 || pb[3].Location.X > 200) Roll2();
        
// }
        
// private void Roll4()//在4转1
        
// {
        
//     for (int i = 1; i < 4; i++)
        
//     {
        
//         int x = System.Math.Abs(pb[0].Location.X - pb[i].Location.X);
        
//         int y = System.Math.Abs(pb[0].Location.Y - pb[i].Location.Y);
        
//         pb[i].Location = new Point(pb[0].Location.X + y, pb[0].Location.Y - x);
        
//     }
        
//     //如果坐标越界就进行反旋转
        
//     if (pb[0].Location.X > 200 || pb[1].Location.X > 200 || pb[2].Location.X > 200 || pb[3].Location.X > 200) Roll3();
        
//     if (pb[0].Location.X < 0 || pb[1].Location.X < 0 || pb[2].Location.X < 0 || pb[3].Location.X < 0) Roll3();
        
// }

        
//检查是否到底 到底则进行转换
        private void Rollx(int a,int b)
        
...{
            
bool flag=true;
            PictureBox[] tmpPB
=new PictureBox[4];
            
for(int i=0;i<4;i++)
            
...{
                tmpPB[i]
=new PictureBox();
                
int x = System.Math.Abs(pb[0].Location.X - pb[i].Location.X);
                
int y = System.Math.Abs(pb[0].Location.Y - pb[i].Location.Y);
                tmpPB[i].Location 
= new Point(pb[0].Location.X +a* y, pb[0].Location.Y +b*x);
                
if (!checkPes(tmpPB[i].Location)) flag = false;
            }

            
if (flag)
            
...{
                
for (int i = 0; i < 4; i++)
                
...{
                    
int x = System.Math.Abs(pb[0].Location.X - pb[i].Location.X);
                    
int y = System.Math.Abs(pb[0].Location.Y - pb[i].Location.Y);
                    pb[i].Location 
= new Point(pb[0].Location.X + a * y, pb[0].Location.Y + b * x);
                }

            }

        }


        
public bool check(Form f)
        
...{
            
for(int i=0;i<4;i++)
            
...{
                
if (pb[i].Location.Y > 500)
                
...{
                    
//任一一个图像到底则整个图像进行转换
                    changToOld(f);
                    
return true;
                }

                
//判断该图像所对应的位置的下方是否有已经触底的图形
                int x 
分享到:
评论

相关推荐

    C#版俄罗斯方块视频教程

    【C#版俄罗斯方块视频教程】是一套深入解析如何使用C#编程语言实现经典游戏——俄罗斯方块的教育资源。教程通过多个视频章节,详细介绍了游戏开发的全过程,旨在帮助初学者和有一定C#基础的开发者理解游戏编程的基本...

    C#俄罗斯方块游戏[内附源代码]

    本篇将详细讲解如何使用C#来创建一款经典的俄罗斯方块游戏,同时,提供源代码供学习者参考。 首先,我们了解下俄罗斯方块的基本概念。俄罗斯方块是一款流行的电子游戏,玩家需要控制各种形状的方块,让它们在屏幕...

    C# 实现俄罗斯方块(附源码)

    通过本文,我们可以学习到使用 C# 语言实现俄罗斯方块游戏的知识点,包括 BackgroundWorker、Action 委托、TableLayoutPanel 等技术,了解俄罗斯方块的流程图和效果图,掌握俄罗斯方块的核心代码,包括定义方块的...

    俄罗斯方块C#实现完整源码

    在本文中,我们将深入探讨如何使用C#编程语言实现经典的电子游戏——俄罗斯方块。这个项目对于初学者来说是一个很好的起点,因为它涉及到基础的游戏逻辑、图形用户界面(GUI)设计以及事件处理。以下是对实现俄罗斯...

    C#游戏俄罗斯方块

    本篇文章将详细讲解如何利用C#实现经典游戏——俄罗斯方块的完整代码实现,带你深入理解游戏逻辑和C#编程技巧。 首先,我们要了解俄罗斯方块的基本规则。游戏的核心是各种形状的“方块”,它们从屏幕顶部随机落下,...

    陈广 c# 制作俄罗斯方块7

    《陈广C#制作俄罗斯方块7》是一个关于利用C#编程语言开发经典游戏——俄罗斯方块的教学资源。在这个项目中,陈广老师通过清晰易懂的方式,带领学习者掌握C#的基础语法以及如何将其应用于游戏开发。SWF格式的文件意味...

    一个简单的C#俄罗斯方块

    本项目“一个简单的C#俄罗斯方块”是一个很好的实例,展示了如何利用C#的基础知识和游戏开发原理来创建一个经典的休闲游戏——俄罗斯方块。本文将详细讲解这个项目中的关键知识点。 1. **C#基础知识**:项目首先...

    俄罗斯方块C#编程讲解

    《C#编程实现俄罗斯方块详解》 在编程领域,经典游戏俄罗斯方块因其简单而富有挑战性,一直是初学者和资深开发者喜爱的项目之一。本文将以C#语言为基础,详细解析如何实现这一游戏,旨在帮助读者理解C#编程基础以及...

    C#语言基础-小游戏俄罗斯方块制作视频讲解

    在本课程"C#语言基础-小游戏俄罗斯方块制作视频讲解"中,我们将深入学习C#编程语言的基础,并通过实际操作来构建经典游戏——俄罗斯方块。这个教程旨在帮助初学者更好地理解和掌握C#语言的核心概念,同时提升他们的...

    C#俄罗斯方块源代码.rar

    本篇将详细讲解基于C#实现的俄罗斯方块源代码,这对于那些希望深入理解C#编程、游戏开发或者想要学习如何构建经典游戏的开发者来说,是一份极好的学习资源。 首先,俄罗斯方块是一款经典的休闲益智游戏,其基本原理...

    俄罗斯方块C#讲解part6

    在本教程中,我们将深入探讨如何使用C#编程语言实现经典游戏——俄罗斯方块。"俄罗斯方块C#讲解part6"是由陈广老师主讲的一系列教程的一部分,旨在帮助开发者掌握C#的基础知识以及如何将这些知识应用于游戏开发。 ...

    俄罗斯方块C#讲解part8

    在本节"俄罗斯方块C#讲解part8"中,我们将会深入探讨如何利用C#编程语言来实现经典游戏——俄罗斯方块。陈广老师以其清晰的思路和详尽的讲解,将带领我们逐步构建这个游戏。 首先,我们需要理解C#的基础语法和面向...

    C#俄罗斯方块游戏源码.rar

    【标题】"C#俄罗斯方块游戏源码.rar"是一个基于C#编程语言实现的俄罗斯方块游戏的源代码集合。这个压缩包包含了用于构建一个完整的俄罗斯方块游戏的所有必要文件,让学习者或者开发者能够深入理解游戏的内部机制。 ...

    c#视频俄罗斯方块制作1

    本教程以陈广老师的教学全集为蓝本,主要针对初学者,深入浅出地讲解如何使用C#来实现经典游戏——俄罗斯方块的制作。通过这个项目,你可以学习到C#的基础语法、面向对象编程思想以及游戏开发的基本流程。 首先,...

    俄罗斯方块C#讲解part4

    在本教程中,“俄罗斯方块C#讲解part4”由知名讲师陈广主讲,主要聚焦于使用C#编程语言实现经典游戏“俄罗斯方块”的过程。C#是一种广泛应用于游戏开发、桌面应用和Web应用的面向对象的编程语言,其强大的功能和简洁...

    俄罗斯方块C#讲解part2

    在本教程"俄罗斯方块C#讲解part2"中,我们深入探讨了使用C#语言实现经典游戏俄罗斯方块的编程技术。陈广老师以其清晰的思路和详尽的讲解,帮助开发者理解如何构建这个游戏的核心功能。以下是这个教程中涵盖的一些...

    俄罗斯方块C#讲解part5

    在本教程中,我们将深入探讨如何使用C#编程语言实现经典游戏——俄罗斯方块。由知名讲师陈广主讲,他以其清晰的思路和详尽的讲解方式,使得这个复杂的过程变得易于理解。 首先,我们要了解C#的基础知识。C#是一种...

    陈广c#制作俄罗斯方块1-2

    通过编写俄罗斯方块的游戏代码,初学者不仅能够了解游戏开发的基本原理,还能学习到图形界面的设计、事件的处理机制、定时器的使用以及数据结构的应用等编程中的关键技能。 在本教学资源中,陈广老师从最基础的C#...

    俄罗斯方块1 c#

    《视觉C#编程:构建俄罗斯...在学习过程中,可以参考《[A184]C#程序设计 俄罗斯方块 第一讲.swf**提供的教程,逐步跟随讲解完成每一个步骤。不断实践,你将成为一名熟练的C#程序员,甚至可能开启自己的游戏开发之旅。

    C#俄罗斯方块(陈广老师)

    【C#俄罗斯方块开发详解】 C#是一种广泛应用于游戏开发、桌面应用和Web服务的高级编程语言,由Microsoft公司开发。在这个项目中,我们将会深入探讨如何利用C#来实现一个经典的游戏——俄罗斯方块。这个教程由知名的...

Global site tag (gtag.js) - Google Analytics