玩过华容道,也用D练习下.
写的粗糙,请见谅.
import dfl.all;
import std.stdio;
import std.math;
import std.string;
class Block:Label
{
bool caps=false;
bool canMove = false;
huaForm pars;
Rect curRect,savRect;
int id;
int w =100;
this(int i,huaForm f,Color c,int px,int py,int lw,int lh)
{
id = i;
curRect = dfl.base.Rect(px,py,lw,lh);
savRect = curRect;
this.bounds = dfl.base.Rect(px*w+10, py*w+10, lw*w -10,lh*w -10);
this.parent = f;
pars = f;
this.text = format("x=%d,y=%d,w=%d,h=%d.",curRect.x,curRect.y,curRect.width,curRect.height);
this.backColor = c;
}
void Move(int px,int py)
{
//X: 0-3,Y: 0-4.
//writefln("initBloc,x:%d,y:%d.moveTo:x=%d,y=%d",this.left,this.top,px,py);
savRect = curRect;
double a,b;
a = px;
b = py;
px = cast(int)floor(a /100);
py = cast(int)floor(b /100);
if(py < 0 ) py =0;
if(px < 0 ) px =0;
if(py + curRect.height > 5) py = py -1;
if(px + curRect.width > 4) px = px -1;
if( py == curRect.y || px == curRect.x)
{
if( px == curRect.x)
{
if( py > curRect.y ) curRect.y++;
if( py < curRect.y ) curRect.y--;
}
if( py == curRect.y)
{
if( px > curRect.x ) curRect.x++;
if( px < curRect.x ) curRect.x--;
}
}
else
{
return;
}
//writefln("calc,x:%d,y:%d.",curRect.x,curRect.y);
if( pars.canMov(curRect,id) == false )
{
curRect = savRect;
return;
}
//save to current;
px = curRect.x;
py = curRect.y;
//writefln("initMove,x:%d,y:%d.",px,py);
this.top = py * w + 10;
this.left = px * w +10;
//writefln("caleMove,x:%d,y:%d.",this.left,this.top);
this.text = format("x=%d,y=%d,w=%d,h=%d.",curRect.x,curRect.y,curRect.width,curRect.height);
}
protected void onMouseDown(MouseEventArgs mea)
{
super.onMouseDown(mea);
caps = true;
//writefln("caps!");
}
}
Rect getRect(int px,int py,int w,int h)
{
double a,b;
a = px;
b = py;
px = cast(int)floor(a /100);
py = cast(int)floor(b /100);
if(py < 0 ) py =0;
if(px < 0 ) px =0;
if(py + h > 5) py = py -1;
if(px + w > 4) px = px -1;
return Rect(px,py,w,h);
}
class huaForm: dfl.form.Form
{
int w = 100;
static Block[10] blocks;
this()
{
this.text ="Chinese Sliding Block -HuaRongDao";
this.width = 4* w + 20;
this.height = 5* w + 60;
this.maximizeBox = false;
addBlock();
}
void addBlock()
{
blocks[0] = new Block(0,this,Color(255,0,0), 0,0,1,2);
blocks[1] = new Block(1,this,Color(255,255,0),1,0,2,2);
blocks[2] = new Block(2,this,Color(255,0,0), 3,0,1,2);
blocks[3] = new Block(3,this,Color(0,255,0), 0,2,1,2);
blocks[4] = new Block(4,this,Color(0,255,0), 3,2,1,2);
blocks[5] = new Block(5,this,Color(0,255,255),1,2,2,1);
blocks[6] = new Block(6,this,Color(0,0,255), 0,4,1,1);
blocks[7] = new Block(7,this,Color(0,0,255), 3,4,1,1);
blocks[8] = new Block(8,this,Color(0,0,255), 1,3,1,1);
blocks[9] = new Block(9,this,Color(0,0,255), 2,3,1,1);
}
protected void onMouseUp(MouseEventArgs mea)
{
super.onMouseUp(mea);
foreach(Block b;blocks)
{
if( canMove(Point(mea.x,mea.y)) == true && b.caps==true)
{
b.Move(mea.x,mea.y);
b.caps = false;
return;
}
}
}
bool canMov(Rect npt,int i)
{
foreach(int j,Block b;blocks)
{
if(i==j) continue;
Rect r = dfl.base.Rect(npt.x*w+10, npt.y*w+10, npt.width*w -10,npt.height*w -10);
if(r.contains(b.bounds.x,b.bounds.y)==true)
{
//writefln("Baohan:,x:%d,y:%d.ID:%d",b.curRect.x,b.curRect.y,b.id);
return false;
}
if(b.curRect.contains(npt) == true)
{
//writefln("beiBaohan:,x:%d,y:%d.ID:%d",b.curRect.x,b.curRect.y,b.id);
return false;
}
}
return true;
}
bool canMove(Point npt)
{
foreach(Block b;blocks)
{
if(b.bounds.contains(npt) == true) return false;
}
return true;
}
}
int main()
{
int result = 0;
try
{
Application.run(new huaForm());
}
catch(Object o)
{
msgBox(o.toString(), "Fatal Error", MsgBoxButtons.OK, MsgBoxIcon.ERROR);
result = 1;
}
return result;
}
分享到:
相关推荐
c语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容道源码.zipc语言华容...
《易语言华容道源代码解析》 易语言,一种以中文编程为特色的编程语言,旨在降低编程的门槛,让更多的非计算机专业人员也能轻松掌握编程技能。华容道,一款经典的逻辑游戏,通过移动棋子,帮助曹操从华容道逃出。将...
【C++华容道解法】是一个利用C++编程语言实现的华容道游戏解决方案。华容道,源自中国的传统智力游戏,玩家需通过移动棋盘上的棋子,帮助曹操从棋盘的一端(通常是最下方)顺利移动到另一端(通常是最上方),在规定...
这个C语言版本的华容道游戏包含八个不同难度级别的关卡,为玩家提供了丰富的挑战。 源代码中的文件主要分为以下几个部分: 1. **winlay.c**:可能包含了关于游戏界面布局和窗口管理的函数,如窗口创建、显示和事件...
数字华容道是一种基于数字排列的益智游戏,源自经典的实体版华容道,现在已经被移植到网页上,使得更多人能够随时随地享受这种挑战智力的游戏。网页版数字华容道通常采用滑动方块的形式,目标是通过移动数字方块,使...
《华容道解法程序2.0:VB6.0版本深度解析》 华容道,这个古老的中国益智游戏,以其独特的策略性和趣味性深受玩家喜爱。在信息技术日新月异的今天,将传统游戏与编程技术相结合,无疑为华容道带来了新的生命。本文将...
Java语言实现华容道游戏(横刀立马)是一项有趣且具有挑战性的编程任务,它将经典的游戏玩法与编程技巧相结合,让玩家在控制台上体验到华容道的乐趣。在这个项目中,我们将深入探讨如何利用Java的基本语法、数据结构...
《华容道算法进阶版》 华容道,源于中国的传统益智游戏,历史悠久,深受人们喜爱。在数字化时代,华容道游戏被赋予了新的生命,演变为计算机科学中的算法挑战。这个进阶版的华容道算法,不仅保留了原游戏的趣味性,...
本项目采用Python语言,结合pygame库,成功实现了华容道游戏的数字化版本,并且包含了解密算法,可以在Linux和Windows操作系统上运行,具有较高的可移植性和实用性。 Python是一种广泛使用的高级编程语言,以其简洁...
本文将深入探讨如何使用C#编程语言,实现华容道的求解算法及动态演示功能。 首先,我们要了解华容道的基本规则。游戏面板上,各个棋子代表三国时期的人物,目标是通过移动棋子,让曹操从起点到达出口。游戏的关键...
针对以上要求,开发一个小型的华容道小游戏,满足如下功能要求:1、设计一个华容道游戏界面;2、创建对象,代表华容道中的人物;3、通过鼠标来控制人物的移动;4、增加多个游戏难度。用户可以通过鼠标来控制人物的...
《华容道游戏快速解算程序解析》 华容道,源自中国的一种古典益智游戏,以其独特的棋盘布局和挑战性的解谜过程深受玩家喜爱。在这个数字化的时代,一款名为"一个快速解算华容道程序"的软件应运而生,它能够高效地...
本文将深入探讨如何用C++语言实现一个简单的华容道求解算法,尽管该实现可能效率较低,但有助于理解基础的搜索策略。 首先,我们需要建立华容道棋盘的模型。通常,华容道棋盘是一个二维矩阵,其中包含不同大小的...
总的来说,《华容道(最终版)_华容道》是C语言编程技术的一个优秀实例,展示了如何用编程语言来实现一个经典游戏,并提供了挑战玩家思维的娱乐体验。无论是对于学习C语言的初学者还是寻求提高编程技能的开发者,研究...
而利用C++编程语言和MFC(Microsoft Foundation Classes)库开发的华容道自动求解程序,则为玩家提供了更加便捷的解谜体验。本文将详细解析这一程序的核心技术和实现方法。 首先,我们要理解C++作为一款强大的面向...
在计算机领域,利用编程语言实现数字华容道的游戏,既能够锻炼逻辑思维,又能够深入理解编程技术。本文将对基于C++和QT库实现的数字华容道游戏源码进行解析,旨在为学习者提供一个深入理解C++编程、图形界面设计和...
不错的毕业设计、课程设计、练手c++语言项目:华容道.rar 不错的毕业设计、课程设计、练手c++语言项目:华容道.rar 不错的毕业设计、课程设计、练手c++语言项目:华容道.rar 不错的毕业设计、课程设计、练手c++语言...
华容道算法简洁版,
本文将深入探讨使用C#编程语言开发的“华容道V2.0”版本,该版本是基于VS2010环境编写的,不仅修复了原有的错误,而且对游戏算法进行了优化,提升了玩家的使用体验。 首先,我们来看看C#语言在游戏开发中的应用。C#...
c语言华容道小游戏完整源码 华容道游戏说明: 编译环境:Visual C++ 6.0,EasyX 2014冬至版 最后修改:2015-3-14 操作方式:操作方式:鼠标单击要移动的棋子后再点击棋子即可移动,将曹操移动到出口处,过关。 ...