public board(mino_gene Minorule, Garbagegene garbagerule, int next_queue_size) { this.Minorule = Minorule; this.next_queue_size = next_queue_size; this.garbagerule = garbagerule; for (int i = 0; i < next_queue_size; ++i) { gene_next_piece(); } }
public void init() { F = new board(new mino_gene(), new TopGarbage(), 0); Board = F; attacking = new Stack <int>(); garbage_queue = new Stack <int>(); gamerule = new rule(new int[] { 0, 1, 1, 2, 1 }, new int[] { 0, 2, 4, 6 }, new int[] { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, -1 }, new int[] { 0, 0, 1, 2, 4 }); Minorule = new mino_gene(); }
static public List <mino> findalltslot(simpboard Board) { List <mino> allpos = new List <mino>(); bool[,,] visit = new bool[42, 12, 4]; bool[,,] visit1 = new bool[42, 12, 4]; Queue <mino_stat> minoque = new Queue <mino_stat>(); if (!Board.piece.check_mino_ok(ref Board, Board.piece.minopos)) { return(allpos); } minoque.Enqueue(new mino_stat(Board.piece.minopos, Board.piece.stat)); visit[Board.piece.minopos.x + 2, Board.piece.minopos.y + 2, Board.piece.stat] = true; mino_gene minogen = new mino_gene(); mino temp = Board.piece.clone(); while (minoque.Count != 0) { mino_stat node = minoque.Dequeue(); //visit[node.minoopos.x, node.minoopos.y, node.stat] = true; // 硬降 temp.setpos(node.minoopos); temp.setstat(node.stat); if (temp.left_rotation(ref Board) != -1) { if (!visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat]) { visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat] = true; minoque.Enqueue(new mino_stat(temp.minopos, temp.stat, node.idx, node.path, 2, node.movetime)); } } temp.setpos(node.minoopos); temp.setstat(node.stat); if (temp.right_rotation(ref Board) != -1) { if (!visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat]) { visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat] = true; minoque.Enqueue(new mino_stat(temp.minopos, temp.stat, node.idx, node.path, 3, node.movetime)); } } temp.setpos(node.minoopos); temp.setstat(node.stat); if (temp.left_move(ref Board)) { if (!visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat]) { visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat] = true; minoque.Enqueue(new mino_stat(temp.minopos, temp.stat, node.idx, node.path, 0, node.movetime)); } } temp.setpos(node.minoopos); temp.setstat(node.stat); if (temp.right_move(ref Board)) { if (!visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat]) { visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat] = true; minoque.Enqueue(new mino_stat(temp.minopos, temp.stat, node.idx, node.path, 1, node.movetime)); } } temp.setpos(node.minoopos); temp.setstat(node.stat); int dis = temp.soft_drop_floor(ref Board); //{ if (!visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat]) { visit[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat] = true; minoque.Enqueue(new mino_stat(temp.minopos, temp.stat, node.idx, node.path, -dis, node.movetime, repeat: dis)); } //} if (!visit1[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat]) { visit1[temp.minopos.x + 2, temp.minopos.y + 2, temp.stat] = true; mino fi = temp.clone(); fi.spinstatupdate(ref Board); fi.path = node; allpos.Add(fi); } //source.setpos } return(allpos); }
public void run() { while (true) { Juraknifecore bot = new Juraknifecore(); bot.init(); //bot.boardtree.Board.console_print(false); mino_gene mino_Gene = new mino_gene(); Random rand = new Random(); for (int i = 0; i < 3; ++i) { //bot.add_next(rand.Next() % 7); bot.add_next(mino_Gene.genebag7int()); } //char a2 = Console.ReadKey().KeyChar; //bot.add_next(3); //bot.add_next(2); int t = 7; //int[] nextqq = { 3, 1, 6, 2, 0, 5, 2, 1, 4, 0, 1, 6, 5 }; Queue <tree> ans = new Queue <tree>(); while (true) //foreach (int q in nextqq) { //bot.add_next(rand.Next() % 7); bot.add_next(mino_Gene.genebag7int()); //bot.add_next(q); bot.extend_node(); //if (bot.boardtree.treenode[0].res.score < -1000000) { Console.WriteLine("ressearch"); foreach (tree chird in bot.boardtree.treenode) { chird.Board.console_print(false); Console.WriteLine("atk = {0}", chird.attack); Console.WriteLine("maxattack = {0}", chird.maxattack); Console.WriteLine("def = {0}", chird.def); Console.WriteLine("maxdef = {0}", chird.maxdef); Console.WriteLine("atkscore = {0}", chird.atkscore); Console.WriteLine("battlescore = {0}", chird.battlescore); Console.WriteLine("combo = {0}", chird.Board.combo); Console.WriteLine("clearrow = {0}", chird.Board.clearrow); Console.WriteLine("movetime = {0}", chird.finmino.path.movetime); Console.WriteLine("name = {0}", chird.finmino.name); Console.WriteLine("Tspin = {0}", chird.finmino.Tspin); Console.WriteLine("isb2bclear = {0}", chird.Board.isb2bclear); Console.WriteLine("nodebattlescore = {0}", bot.evalweight.evalbattle(chird)); Console.WriteLine(chird.score); Console.WriteLine("maxdepth = {0}", chird.maxdepth); //Console.WriteLine("scoreex = {0}", chird.scoreex); //Console.WriteLine(chird.finmino.minopos.x); //Console.WriteLine(chird.finmino.minopos.y); //Console.WriteLine(chird.finmino.stat); Console.WriteLine(chird.finmino.name); //foreach (int a in chird.Board.column_height) //{ // Console.Write(a); // Console.Write(" "); //} //Console.WriteLine(""); chird.finmino.console_print(); if (chird.holdpiece != -1) { defaultop.demino.getmino(chird.holdpiece).console_print(); } double kk = 0; //eval.evalhole(chird, chird.Board.column_height, 0, ref kk); //chird.res.print(); //char a1 = Console.ReadKey().KeyChar; } } tree root = bot.requset_next_move(); if (root.isdead) { Console.WriteLine(root.pieceidx);; break; } ; //ans.Enqueue(root); //if (ans.Count > 200) ans.Dequeue(); //eval.evalfield(root); //Console.Clear(); //root.Board.console_print(true, root.finmino); //if (root.pieceidx % 1 == 0 || root.score < -1000000) { root.Board.console_print(false); Console.WriteLine("resroot"); Console.WriteLine("atk = {0}", root.attack); Console.WriteLine("maxattack = {0}", root.maxattack); Console.WriteLine("def = {0}", root.def); Console.WriteLine("maxdef = {0}", root.maxdef); Console.WriteLine("atkscore = {0}", root.atkscore); Console.WriteLine("battlescore = {0}", root.battlescore); Console.WriteLine("combo = {0}", root.Board.combo); Console.WriteLine("clearrow = {0}", root.Board.clearrow); Console.WriteLine("movetime = {0}", root.finmino.path.movetime); Console.WriteLine("name = {0}", root.finmino.name); Console.WriteLine("Tspin = {0}", root.finmino.Tspin); Console.WriteLine("isb2bclear = {0}", root.Board.isb2bclear); Console.WriteLine("nodebattlescore = {0}", bot.evalweight.evalbattle(root)); Console.WriteLine(root.score); Console.WriteLine("maxdepth = {0}", root.maxdepth); //Console.WriteLine("scoreex = {0}", root.scoreex); //Console.WriteLine(bot.nodequeue.Count); //Console.WriteLine(root.pieceidx); //Console.WriteLine(root.Board.piece.name); //root.res.print(); //foreach (int a in root.Board.column_height) //{ // Console.Write(a); // Console.Write(" "); //} } //foreach (int a in root.Board.column_height) //{ // Console.Write(a); // Console.Write(" "); //} Console.WriteLine(""); //root.res.print(); Console.WriteLine("-----------------------------------------------"); root.finmino.console_print(); if (root.holdpiece != -1) { defaultop.demino.getmino(root.holdpiece).console_print(); } // char a1 = Console.ReadKey().KeyChar; //char a2 = Console.ReadKey().KeyChar; //foreach (tree a in bot.boardtree.treenode) //{ // //a.Board.console_print(false); // //char a1 = Console.ReadKey().KeyChar; //} //bot.add_next(2); //foreach (tree a in bot.boardtree.treenode) //{ // bot.extend_node(a); // foreach (tree a1 in a.treenode) // { // a1.Board.console_print(false); // char a2 = Console.ReadKey().KeyChar; // //char a1 = Console.ReadKey().KeyChar; // } //} } //foreach (tree root in ans) //{ // root.Board.console_print(false); // Console.WriteLine("resroot"); // Console.WriteLine(root.score); // Console.WriteLine(bot.nodequeue.Count); // Console.WriteLine(root.pieceidx); // Console.WriteLine(root.Board.piece.name); // root.res.print(); //} } }