仓颉PAT程序设计 L3-037 夺宝大赛(cangjie)(1)

// 夺宝大赛 hunt
from std import console.*
from std import convert.*
from std import collection.*
from std import math.*
from std import format.*

//import std.format.*
//import std.math.*
//import std.collection.*
//import std.console.*
//import std.convert.*

//判断输入的字符串是否为空。
func getOrThrow(p: ?String): String{
    match (p) {
        case Some(x) => x
        case None => ""
    }
}
//判断输入的字符串是否为数字。返回真假。
func isNumber(number_string :String):Bool{
    var number_rune :Array<Rune>=number_string.toRuneArray()
    for(number in number_rune){
        if(!number.isAsciiNumber()){
            return false   
        }
    }
    return true
}

//获取输入的数字字符串。返回字符串。
func getInputNumber():String{
    var input=Console.stdIn.readln()
    let input_to_strig: Option<String> = input
    var input_to_strig_to :String=getOrThrow(input_to_strig)
    if(isNumber(input_to_strig_to)){
        return input_to_strig_to
    }
    return ""
}

//获取输入的字符串。返回字符串。
func getInputString():String{
    var input=Console.stdIn.readln()
    let input_to_strig: Option<String> = input
    var input_to_strig_to :String=getOrThrow(input_to_strig)
        return input_to_strig_to
    return ""
}

//获取m和n。
func getMandN(temp :String):Array<Int64>{
    //println("temp = ${temp}")
    if(temp.size>0){
    var  tempArray :Array<String> =temp.split(" ",118,)
    if(tempArray.size==2){
        var m:Int64=Int64.parse(tempArray[0])
        var n:Int64=Int64.parse(tempArray[1])
        if(2<m && n<=100){
            //println("m = ${m} n = ${n}")
            return [m,n]
        }
    }
    }
    return []
}

func getLine(temp :String,n :Int64):Array<String>{
    if(temp.size==2*n-1){
    var  tempArray :Array<String> =temp.split(" ",118,)
    var tempA =Array<String>(n,item:"")
    for(i in 0..tempArray.size){
        tempA[i]=tempArray[i]
    }
    return tempA
    }
    return []
}
//清洗 划定游戏边界,没有进入边界的人都踢出
func getQingXi(temp :ArrayList<(Array<String>,Array<String>)>):ArrayList<Array>{
    var arraylistLineKeyReal=ArrayList<Array<String>>()
    var findIt:Array<String>=["",""]
    var start:Array<String> =["",""]
    var end:Array<String> =["",""]
    for(i in 0..temp.size){
        for(j in 0..temp[i][1].size){
            if(temp[i][1][j]=="2"){
                findIt[0]=i.toString()
                findIt[1]=j.toString()

            }
        }
    }
    if(findIt[0].size>0&&findIt[1].size>0){
        var boo :Bool=false
        for(i in findIt[1]-1..:-1){
            if(temp[findIt[0][1][i]]=="0"){
                start[0]=findIt[0]
                start[1]=temp[findIt[0][1][i]]
                Boo=true
            }

        }
        if(!boo){
        for(i in Int64.parse(findIt[0]..=0:-1)){
            for(j in temp[0][1].size..0:-1){
                if(temp[i][1][j]=="0"){
                    start[0]=i.toString()
                    start[1]=j.toString()
                    boo=true
                    break
                }
            }
            if(boo){
                break
            }
        }
        }
        //end
        boo =false
        for(i in findIt[1]..temp[0][1].size){
            if(temp[findIt[0][1][i]]=="0"){
                end[0]=findIt[0]
                end[1]=temp[findIt[0][1][i]]
                Boo=true
            }

        }
        if(!boo){
        for(i in findIt[1]..temp[0].size){
            for(j in 0..temp[0][1].size){
                if(temp[i][1][j]=="0"){
                    end[0]=i.toString()
                    end[1]=j.toString()
                    boo=true
                    break
                }
            }
            if(boo){
                break
            }
        }
        }

    }
    
    arraylistLineKeyReal.append(findIt)
    arraylistLineKeyReal.append(start)
    arraylistLineKeyReal.append(end)
    return arraylistLineKeyReal
}

func move(x :String,y :String,ArrayList<(Array<String>,Array<String>)>):Array<String>{
    

}

func control(){
    //输入游戏数据
   var arrayMandN :Array<Int64> =getMandN(getInputString())
   var arraylistLine=ArrayList<(Array<String>,Array<String>)>()
   if(!arrayMandN.isEmpty()){
    for(i in 0..arrayMandN[1]){
        var tempArray:(Array<String>,Array<String>)=(["","","",""],getLine(getInputString(),arrayMandN[1]))
        arraylistLine.append(tempArray)   
    }
   }
    println("arraylistLine 0 = ${arraylistLine[0][1]}")
    println("arraylistLine 1 = ${arraylistLine[1][1]}")
    //输入游戏人物数据
    var gamerNumber:Int64=Int64.parse(getInputString())
    var arrayGamer=ArrayList<Array<String>>()
    if(gamerNumber>0&&gamerNumber<arrayMandN[0]*arrayMandN[1]/2){
        for (i in 0..gamerNumber){
        var tempGamer:Array<String> =getInputString().split(" ",118,)
        arrayGamer.append([i.toString,tempGamer[0],tempGamer[1],"0",""])
        }
    }
    //清洗游戏人物
    var arrayGamerDell:ArrayList<Array<String>>=getQingXi(arraylistLine)
    var arrayGamerReall=ArrayList<Array<String>>()
    if(!arrayGamerDell.isEmpty()){
        for(i in arrayGamer){
            if(i[1]=>arrayGamerDell[1][0]&&i[1]<=arrayGamerDell[2][0]){
                if(i[1]==arrayGamerDell[1][0]&&i[0]>arrayGamerDell[1][1]){
                    arrayGamerReall.append(i)

                }else if(i[1]==arrayGamerDell[2][0]&&i[0]<arrayGamerDell[2][1]){
                    arrayGamerReall.append(i)
                }else if(i[1]>arrayGamerDell[1][0]&&i[1]<arrayGamerDell[2][0]){
                    arrayGamerReall.append(i)
                }
            }
        }

    }
    //开始游戏循环
    if(!arrayGamerReall.isEmpty()){
    while(true){
        //判断游戏是否结束
        var count =0
        for(i arrayGamerReall){
            if(i[1]==arrayGamerDell[0][1]&&i[2]==arrayGamerDell[0][0]){
                count++;
                i[4]="win"
            }
        }
        if(count==1){
            for(i in arrayGamerReall){
                if(i[4]=="win"){
                    println("${i[0]} ${i[3]}")
                    break
                }
            }
        }
        i(count>1){
            println("No winner.")
        }
        //开始启动
        for(i in arrayGamerReall){
            var temp:Array<String>=move()
        }



    }

    }





}

main(){
    control()

    return 0
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值