关于 扑克 牌 的算法问题?(数据结构高手:请您一览) 急急急!!! (50分)

  • 主题发起人 apple058
  • 开始时间
A

apple058

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
本人想编一个 扑克 牌 游戏 有几点搞不定
type
pai = record
paimian:integer;
paise:1..4;
end;
var
puke:array[1..25] of pai;
// 申明变量
------------------------------
procedure qupai();
// 取牌
begin
for i:=1 to 25do
// 一个人可以得到 25 张
puke.paimian:=random(13);
// 随机抽取牌值(假设牌为 A,2,3,4,5,6,7,8,9.10,j,Q,k 其顺序为 1..13)
// 目的是随便得到一些牌的值,并且在牌面的范围之内
puke.paise:=random(4);
// 随便抽取牌色(假设牌色为 黑,红,梅。方,其顺序为 1..4)
end;

------------------------------
function fenhuase(pk:array[1..25] of pai):array [1..25] of pai;
// 分花色
// 但是这里有问题 函数中间数组的原数不能确定为 25, 并且 好像还不能为数组类型(纪录)
var
hei,hong,mei,fang:array [1..25] of pai ;
// 定义 4 个数组 用于临时放一下黑,红,梅,方 4 中花色的牌
hei1,hong1,mei1,fang1:ingteger;
// 用于记录当前花色的情况 个数
zhengge:integer;
// 用于记录整个数组当前的个数
i,j:integer;
flag:0..1;
begin
for i:=1 to 25-1do
begin
flage:=0;
for j:=1 to 25-ido
if pk[j+1].paimian < pk[j].paimian
then
begin
x:=pk[j];
// x 为中间变量
pk[j]:=pk[j+1];
pk[j+1]:=x;
end;
if flag=0 then
break;
end;
// 这一段使用的冒泡法排序,我是着书上面打上去的,不管细节就算我对
我的目的值想牌面按顺序排列(A,2,3...Q,K);
hei1:=1;
hong1:=1;
mei1:=1;
fang1;=1;
// 赋初值 记录当前各种花色的牌有多少张
for i:=1 to 25do

case pk.paise of
1: begin
// 为黑桃的就分为一组
hei[hei1]:=pk;
hei1:=hei+1;
end;
2:begin
// 红
hong[hong1]:=pk;
hong1:=hong1+1;
end;
3: begin
// 梅
mei[mei1]:=pk;
mei1:=mei1+1;
end;
4:begin
//方 我想问一下 我把左边的分开了写应该是一样的吧 ?
fang[fang1]:=pk;
fang[fagn1].paimian:=pk.paimian;
fang1:=fang1+1;
fang[fang1].paise:=pk;
end;
fang1:=fang1+1;
end;

for i:=1 to 25do

begin
pk.paimian:=null;
pk.paise:=null;
// 我想把数组清空 不知这样清空是否可以 ?
end;

zhengge:=1;
for i:=1 to hei1do
begin
pk[zhengge]:=hei;
// 把黑桃添加到数组
zhengge:=zhengge+1;
end;

for i:=1 to hong1do
// 红
begin
pk[zhengge]:=hong;
zhengge:=zhengge+1;
end;


for i:=1 to mei1do
// 梅
begin
pk[zhengge]:=mei;
zhengge:=zhengge+1;
end;

for i:=1 to fang1do
// 方
begin
pk[zhengge]:=fang;
zhengge:=zhengge+1;
end;

// 理论是这样就可以吧数祖赋值给函数变量名
for i:=1 to 25do

fenhuase:=pk
end;
但是我就是调试通不过!!!!
--------------------------------------------
请各路高手指点迷津!!! 本人将不慎感激!!!
 
function fenhuase(pk:array[1..25] of pai):array [1..25] of pai;
// 分花色
声明一个数据类型:
type array25=array[1..25] of pai,
然后用array25就可以了。
 
大家好:
我上面一段程序,是用来把握编的扑克游戏 分成 黑,红,梅,方 四种颜色
并且还按牌的面值 顺序排列。
上面一段只是我的思路,肯定有很多面的问题,

1:请问上面的思路是否正确?
2:程序那里有没有写错!!

请各位高手 仔细看完之后 发表一些意见!!!! 谢谢!!
 
1)你还得继续学pascal
2)null不行,你可以自己定义空状态,不如paise:0..4,0表示清空
3)所有自定义类型应显式说明并引用。
 
To iie:
你好:我当时学 Pascal 是的确不很扎实,但我现在要学 Delphi 没有办法!
望多多包含!
另外:在 Delphi 中 用 Null 致空应该可以吧!!!
1: 自定义类型应显式说明并引用 是什么意思?
2: 我上面的程序到底有哪些错误?
 
呵呵什么叫没办法,学不好pascal还学什么delphi。
显式声明的意思是
type Tpaise=1..4;
type
pai = record
paimian:integer;
paise:TPaise;
end;
type
Tpuke=array[1..25] of pai;
// 申明变量
var puke: TPuke;
这样函数便参就可以用数组了
null适用于Variant类型,不适合integer,而且效率很低,最好不用。
 
好有没有那为任兄 对我上面的算法有何高见,希望多多指点
 
好了!终于找出答案来了,原来是我的自定义过程 中 数组参数 的传递 出了问题
它的下限为 0 ,而且动态数组的下限 也为 0 ,我都 弄成 1 了 ,所以在传递的时候出了
问题, 谢谢 大家
 
顶部