24点小游戏,是一款益智游戏,通过给出的四个数,通过加减乘除混合运算,使得等式成立结果为24即可
锻炼大脑思维逻辑,值得学习
一下是借鉴了很多大佬写的程序
综合所用
由星空露珠工作室制作汇总
作者:韩永旗
作者迷你号:247312290
--24点游戏制作
--星空露珠工作室出品
local flag=false
local operator={'+','-','*','/'}
local number,number0,numbernew={},{},{}
local tb1,tb0,tbl0,tbl1,tbl2={},{},{},{},{}
--运算两个数返回运算值
local function calcute(number1,number2,operator0)
--print(number1,number2,operator0)
if operator0=='+' then return number1+number2
elseif operator0=='-' then return number1-number2
elseif operator0=='*' then return number1*number2
elseif operator0=='/' and number2~=0 then return number1/number2
else return -1
end
end--获取重复数组个数
local function chackmain(tbl)
local tbl0={}
local tbl1={}
local tbl2={}
for k0,v0 in ipairs(tbl)
if tbl0[v0]==nil then tbl1[#tbl1+1]=v0 tbl0[v0]=1 else tbl0[v0]=tbl0[v0]+1 end
end
if #tbl1==1 then tbl2={tbl1[1],tbl1[1],tbl1[1],tbl1[1]}
elseif #tbl1==3 then
if tbl0[tbl1[1]]==2 then tbl2={tbl1[2],tbl1[3],tbl1[1],tbl1[1]}
elseif tbl0[tbl1[2]]==2 then tbl2={tbl1[1],tbl1[3],tbl1[2],tbl1[2]}
elseif tbl0[tbl1[3]]==2 then tbl2={tbl1[1],tbl1[2],tbl1[3],tbl1[3]}
end
elseif #tbl1==2 then
if tbl0[tbl1[1]]==2 then tbl2={tbl1[1],tbl1[1],tbl1[2],tbl1[2]}
elseif tbl0[tbl1[1]]==1 then tbl2={tbl1[1],tbl1[2],tbl1[2],tbl1[2]}
elseif tbl0[tbl1[1]]==3 then tbl2={tbl1[2],tbl1[1],tbl1[1],tbl1[1]}
end
elseif #tbl1==4 then tbl2={tbl1[1],tbl1[2],tbl1[3],tbl1[4]}
end
return tbl1,tbl0,tbl2
end--进行运算组合
local function chackmain2(num1,num2,num3,num4)
for i=1,4 do
operator1=operator[i]
firstResult =calcute(num1,num2,operator1)
midResult =calcute(num2,num3,operator1)
tailResult =calcute(num3,num4,operator1)
for j=1,4 do
operator2=operator[j]
firstMidResult = calcute(firstResult,num3,operator2)
firstTailResult= calcute(num3,num4,operator2)
midFirstResult = calcute(num1,midResult,operator2)
midTailResult = calcute(midResult,num4,operator2)
tailMidResult = calcute(num2,tailResult,operator2)
for k=1,4 do
operator3=operator[k]
if calcute(firstMidResult,num4,operator3)==24 then
str="(("..num1..operator1..num2..")"..operator2..num3..")"..operator3..num4
--results.add(expression)
flag = true print(str)
end
if calcute(firstResult,firstTailResult,operator3) == 24
str= "("..num1..operator1..num2..")"..operator3.."("..num3..operator2..num4..")"
--results.add(expression)
flag = true print(str)
end
if calcute(midFirstResult,num4,operator3) == 24
str= "("..num1..operator2.."("..num2..operator1..num3.."))"..operator3..num4
--results.add(expression)
flag = true print(str)
end
if calcute(num1,midTailResult,operator3) == 24
str= num1..operator3.."(("..num2..operator1..num3..")"..operator2..num4..")"
--results.add(expression)
flag = true print(str)
end
if calcute(num1,tailMidResult,operator3) == 24
str= num1..operator3.."("..num2..operator2.."("..num3..operator1..num4.."))"
--results.add(expression)
flag = true print(str)
end
end
end
end
end
--各种排序组合
local function chackmain1(numbernew)
local tb1,tb0={},{}
local number={}
local tb1,tb0,number=chackmain(numbernew)
--print(unpack(tb1))
--print(unpack(number))
if #tb1==1 then chackmain2(number[1],number[2],number[3],number[4])
elseif #tb1==3 then chackmain2(number[1],number[2],number[4],number[4])
chackmain2(number[1],number[4],number[2],number[4])
chackmain2(number[1],number[4],number[4],number[2])
chackmain2(number[2],number[1],number[4],number[4])
chackmain2(number[2],number[4],number[1],number[4])
chackmain2(number[2],number[4],number[4],number[1])
chackmain2(number[4],number[4],number[2],number[1])
chackmain2(number[4],number[2],number[4],number[1])
chackmain2(number[4],number[4],number[1],number[2])
chackmain2(number[4],number[1],number[4],number[2])
chackmain2(number[4],number[1],number[2],number[4])
chackmain2(number[4],number[2],number[1],number[4])
elseif #tb1==2 then
if math.abs(tb0[tb1[1]]-tb0[tb1[2]])==0 then
chackmain2(number[2],number[2],number[4],number[4])
chackmain2(number[2],number[4],number[2],number[4])
chackmain2(number[2],number[4],number[4],number[2])
chackmain2(number[4],number[2],number[2],number[4])
chackmain2(number[4],number[2],number[4],number[2])
chackmain2(number[4],number[4],number[2],number[2])
elseif math.abs(tb0[tb1[1]]-tb0[tb1[2]])==2 then
chackmain2(number[1],number[4],number[4],number[4])
chackmain2(number[4],number[1],number[4],number[4])
chackmain2(number[4],number[4],number[1],number[4])
chackmain2(number[4],number[4],number[4],number[1])
end
elseif #tb1==4 then
for i=1,4 do
for j=1,4 do
if i~=j then
for m=1,4 do
if m~=i and m~=j then
for n=1,4 do
if n~=i and n~=j and n~=m then
chackmain2(number[i],number[j],number[m],number[n])
--print(number[i],number[j],number[m],number[n])
end
end
end
end
end
end
end
end
end--全部题目生成 也可不需要生成,生成时判断可否有解
local function main0()
local number={}
for i=1,13 do
for j=i,13 do
for m=j,13 do
for n=m,13 do
flag = false
local number={i,j,m,n}
chackmain1(number)
if flag==true then
print(unpack(number))
end
end
end
end
end
end--main0() --生成全部
chackmain1({3,3,5,6}) --输入求解