回 帖 发 新 帖 刷新版面

主题:pascal怎样做24点游戏?

扑克牌随机抽出4张牌,然后玩家自己输入表达式算24点,由程序判断正确与否

回复列表 (共4个回复)

沙发

简单思路是:
主要分为两部分:一个解24点的程序,一个计算表达式的程序。
出题就是随机选四个数字,然后验证是否有解(没有重选,直到有为止)。

[url=http://e.ys168.com/?pas24d]附件[/url]

板凳

我的是你打进四个数,他帮你算:
{$N+}
const
  s : array[1..4] of char = ('+','-','*','/');
var
  a             : array[1..4] of integer;
  i,j,k,l,x,y,z : integer;

function cal (m : extended; o : integer; n : extended) : extended;
begin
  case o of
    1 : cal := m+n;
    2 : cal := m-n;
    3 : cal := m*n;
    4 : if n = 0 then cal := 1e+38 else cal := m/n;
  end;
end;

procedure solve;
begin
  if abs((cal(cal(cal(a[i],x,a[j]),y,a[k]),z,a[l]))-24) < 0.001 then begin
    writeln('((',a[i],s[x],a[j],')',s[y],a[k],')',s[z],a[l],' = 24');
    readln; halt; end;
  if abs(cal(cal(a[i],x,cal(a[j],y,a[k])),z,a[l])-24) < 0.001 then begin
    writeln('(',a[i],s[x],'(',a[j],s[y],a[k],'))',s[z],a[l],' = 24');
    readln; halt; end;
  if abs((cal(cal(a[i],x,a[j]),y,cal(a[k],z,a[l])))-24) < 0.001 then begin
    writeln('(',a[i],s[x],a[j],')',s[y],'(',a[k],s[z],a[l],') = 24');
    readln; halt; end;
  if abs((cal(a[i],x,cal(a[j],y,cal(a[k],z,a[l]))))-24) < 0.001 then begin
    writeln(a[i],s[x],'(',a[j],s[y],'(',a[k],s[z],a[l],')) = 24');
    readln; halt; end;
  if abs(cal(a[i],x,cal(cal(a[j],y,a[k]),z,a[l]))-24) < 0.001 then begin
    writeln(a[i],s[x],'((',a[j],s[y],a[k],')',s[z],a[l],') = 24');
    readln; halt; end;
end;

begin
  writeln('----- 24 points -----');
  repeat
    write('Input : ');
    readln(a[1],a[2],a[3],a[4]);
  until (a[1] in [1..13]) and (a[2] in [1..13])
        and (a[3] in [1..13]) and (a[4] in [1..13]);
{ randomize;
  for i := 1 to 4 do begin
     a[i] := random(13)+1;
     write(a[i],'  ');
  end;
  readln;}
  for i := 1 to 4 do
    for j := 1 to 4 do
      for k := 1 to 4 do
        for l := 1 to 4 do
          if [i,j,k,l] = [1..4] then
            for x := 1 to 4 do
              for y := 1 to 4 do
                for z := 1 to 4 do solve;
  writeln('No solution !');
  readln;
end.


{}部分是随机选数,不过每次好像都是一样的。。。。。。
~-~||||

3 楼

做过的,不过只有QB的,改改吧
CLS
DIM g(4), d(4), e(3), f4(4)
FOR i = 1 TO 4
 INPUT g(i)
NEXT i
f$(1) = "+"
f$(2) = "-"
f$(3) = "*"
f$(4) = "/"
FOR i = 0 TO 4
 d(i) = i
NEXT i
DO WHILE d(0) = 0
 GOSUB 200
 j = 4
 DO WHILE d(j - 1) >= d(j)
  j = j - 1
 LOOP
 k = 4
 DO WHILE d(j - 1) >= d(k)
  k = k - 1
 LOOP
 SWAP d(j - 1), d(k)
 FOR p = j TO 3
  FOR q = p + 1 TO 4
   IF d(p) > d(q) THEN SWAP d(p), d(q)
  NEXT q
 NEXT p
LOOP
CLOSE
END
200
FOR a = 1 TO 4
 e(1) = a
 FOR b = 1 TO 4
  e(2) = b
  FOR c = 1 TO 4
   e(3) = c
   GOSUB 100
   IF s = 24 THEN
    FOR h = 1 TO 3
     PRINT g(d(h)); f$(e(h));
    NEXT h
    PRINT g(d(4)); "=24",
   END IF
  NEXT c
 NEXT b
NEXT a
RETURN
100
s = g(d(1))
FOR ii = 1 TO 3
 SELECT CASE e(ii)
  CASE 1
   s = s + g(d(ii + 1))
  CASE 2
   s = s - g(d(ii + 1))
  CASE 3
   s = s * g(d(ii + 1))
  CASE 4
   s = s / g(d(ii + 1))
 END SELECT
NEXT ii
RETURN
END


4 楼

http://www.crsky.com/soft/27824.html
SolarE娱乐软件中有2个是关于算24点的
            By Pascal,By Solar

我来回复

您尚未登录,请登录后再回复。点此登录或注册