private void MoveAuto(int discNumber, int fromPole, int auxPole, int toPole) { if (discNumber == 1) { Console.Clear(); MoveRecord record = towers.Move(fromPole, toPole); moveRecords.Enqueue(record); TowerUtilities.DisplayTowers(GetTowers()); WriteLine($"\nMove {towers.NumberOfMoves} complete. Successfully moved disc from tower {fromPole} to tower {toPole}"); if (towers.IsComplete) { WriteLine($"Number of Moves: {towers.NumberOfMoves}"); } Thread.Sleep(500); return; } else { MoveAuto(discNumber - 1, fromPole, toPole, auxPole); Console.Clear(); MoveRecord record = towers.Move(fromPole, toPole); moveRecords.Enqueue(record); TowerUtilities.DisplayTowers(GetTowers()); WriteLine($"\nMove {towers.NumberOfMoves} complete. Successfully moved disc from tower {fromPole} to tower {toPole}"); Thread.Sleep(500); MoveAuto(discNumber - 1, auxPole, fromPole, toPole); } }
private void MoveStep(int fromPole, int toPole) { MoveRecord record = null; int source = fromPole, dest = toPole; int[][] towersArr = towers.ToArray(); // Interchange fromPole & toPole, if required // If frompole is empty if (towersArr[fromPole - 1].Length == 0) { source = toPole; dest = fromPole; } // When top disk of fromPole > top disk of toPole else if (towersArr[toPole - 1].Length > 0 && (towersArr[fromPole - 1][0] > towersArr[toPole - 1][0])) { source = toPole; dest = fromPole; } record = towers.Move(source, dest); if (record != null) { moveRecords.Enqueue(record); TowerUtilities.DisplayTowers(GetTowers()); WriteLine($"\nMove {towers.NumberOfMoves} complete. Successfully moved disc from tower {source} to tower {dest}"); } else { WriteLine("ERROR: Fail to move - record is null"); } }
private void RedoMove() { try { if (redoMoves.Count == 0 || redoMoves.Peek() == null) { throw new InvalidOperationException("No moves to Redo."); } // Get record from redo stack MoveRecord recordToUndo = redoMoves.Pop(); // Make the move MoveRecord record = towers.Move(recordToUndo.FromPole, recordToUndo.ToPole); // Add the move to queue moveRecords.Enqueue(record); // Push it to undo stack undoMoves.Push(recordToUndo); Console.Clear(); TowerUtilities.DisplayTowers(GetTowers()); WriteLine($"\nMove {towers.NumberOfMoves} complete by redo of move {recordToUndo.MoveNumber}. Disc {recordToUndo.DiscNumber} returned to tower {recordToUndo.ToPole} from tower {recordToUndo.FromPole}"); } catch (Exception ex) { WriteLine($"\n{ex.GetType().Name}: {ex.Message}"); } return; }
private void NormalMove(int fromPole, int toPole) { try { MoveRecord record = towers.Move(fromPole, toPole); moveRecords.Enqueue(record); undoMoves.Push(record); redoMoves.Clear(); Console.Clear(); TowerUtilities.DisplayTowers(GetTowers()); WriteLine($"\nMove {towers.NumberOfMoves} complete. Successfully moved disc from tower {fromPole} to tower {toPole}"); // Game is complete if (towers.IsComplete) { string msg = towers.NumberOfMoves == towers.MinimumPossibleMoves ? $"It took you {towers.NumberOfMoves} moves. Congrats! That's the minimum!" : $"It took you {towers.NumberOfMoves} moves. Not bad, but it can be done in {towers.MinimumPossibleMoves} moves. Try again."; WriteLine(msg); } } catch (Exception ex) { WriteLine($"\n{ex.GetType().Name}: {ex.Message}"); } return; }
public static void GameComplete(Towers pMyTowers, int pFrom, int pTo, Stack <MoveRecord> pUndoStack, Stack <MoveRecord> pRedoStack) { if (pMyTowers.IsComplete) { WriteLine($"\nCongratulations, you completed the puzzle in {pMyTowers.NumberOfMoves} moves."); if (pMyTowers.MinimumPossibleMoves == pMyTowers.NumberOfMoves) { WriteLine($"\nThat's the fewest number of moves possible. I ANOINT YOU THE RULER OF HANOI!"); } else { WriteLine($"\nYou completed the puzzle in {pMyTowers.NumberOfMoves} moves but the fewest possible is {pMyTowers.MinimumPossibleMoves}"); WriteLine("\nLet's give it another shot. What do you say?"); } } else if (pFrom == -2) // redo { MoveRecord redoMoveDetails = pUndoStack.Peek(); WriteLine($"\nMove {pMyTowers.NumberOfMoves} complete by redo of move {pMyTowers.NumberOfMoves - 1}. Disc {redoMoveDetails.Disc} restored to tower {redoMoveDetails.To} from tower {redoMoveDetails.From}."); } else if (pFrom == -3) // undo { MoveRecord undoMoveDetails = pRedoStack.Peek(); WriteLine($"\nMove {pMyTowers.NumberOfMoves} complete by undo of move {undoMoveDetails.MoveNumber}. Disc {undoMoveDetails.Disc} restored to tower {undoMoveDetails.From} from tower {undoMoveDetails.To}."); } else { WriteLine($"\nMove {pMyTowers.NumberOfMoves} complete. Successfully moved disc {pUndoStack.Peek().Disc} from tower {pFrom} to tower {pTo}."); } }
public static MoveRecord Undo(Stack <MoveRecord> pUndoStack, Stack <MoveRecord> pRedoStack, Towers pMyTowers, Queue <MoveRecord> pRecordedMovesQ) { MoveRecord undoMoveRecord = pUndoStack.Pop(); pRedoStack.Push(undoMoveRecord); MoveRecord postUndoMove = pMyTowers.Move(undoMoveRecord.To, undoMoveRecord.From); pRecordedMovesQ.Enqueue(postUndoMove); return(postUndoMove); }
private static void MoveWithStateDisplay(MoveRecord theRecord) { DisplayTowers(theRecord.TowerState); WriteLine(); if (theRecord.MoveNumber == 0) { Thread.Sleep(250); return; } WriteLine($" Move {theRecord.MoveNumber}: Disc {theRecord.Disc} was moved from pole {theRecord.From} to pole {theRecord.To}."); Thread.Sleep(250); }
public static string SBSUpdate(MoveRecord pRecordedMove, Queue <MoveRecord> moveQueue, Towers pMyTowers) { moveQueue.Enqueue(pRecordedMove); Update(pMyTowers); IterativeMoveMessage(pRecordedMove); if (pMyTowers.IsComplete) { WriteLine($"\nStep-through completed. Number of moves: {pRecordedMove.MoveNumber}"); return("X"); } WriteLine("\nPress any key to see the next move or 'X' to exit: "); return(ReadKey().KeyChar.ToString().ToUpper()); }
public static void AutoPlay(int n, int source, int destination, int aux, Towers pMyTowers, Queue <MoveRecord> moveQueue) { if (n > 0) { AutoPlay(n - 1, source, aux, destination, pMyTowers, moveQueue); Thread.Sleep(250); MoveRecord recordedMove = pMyTowers.Move(source, destination); moveQueue.Enqueue(recordedMove); Update(pMyTowers); WriteLine($"Move {moveQueue.Count} complete. Successfully moved disc {recordedMove.Disc} from tower {recordedMove.From} to tower {recordedMove.To}."); AutoPlay(n - 1, aux, destination, source, pMyTowers, moveQueue); } }
public void ReturnMoveRecord_WhenValidMoveMade() { //arrange int numberOfDiscs = 5; int to = 3; int from = 1; Towers testTower = new Towers(numberOfDiscs); MoveRecord testRecord = new MoveRecord(1, 1, 1, 3); //act MoveRecord tRecordedMove = testTower.Move(from, to); //assert Assert.ReferenceEquals(testRecord, tRecordedMove); }
static int JumpTo(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); MoveRecord obj = (MoveRecord)ToLua.CheckObject(L, 1, typeof(MoveRecord)); UnityEngine.Vector3 arg0 = ToLua.ToVector3(L, 2); obj.JumpTo(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int GetInertiaSpeed(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); MoveRecord obj = (MoveRecord)ToLua.CheckObject(L, 1, typeof(MoveRecord)); float arg0 = (float)LuaDLL.luaL_checknumber(L, 2); UnityEngine.Vector3 o = obj.GetInertiaSpeed(arg0); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
internal async Task LinkMoved(Data data, MoveRecord moveRecord) { if (moveRecord.Id == data.Id) { await LoadLinks(data); if (data.Linked.Links == null) { data.Linked.Links = new ObservableCollection <Link>(); } data.Linked.Links.Add(moveRecord.Link); data.Linked.IsNeedToSave = true; await SaveLinks(data); } }
MoveRecord IMoveRecordDao.getSingleMoveRecord(int RemoveID) { MoveRecord MoveRecord = new MoveRecord(); try { if (con.State == ConnectionState.Closed) { con.Open(); } string sql = "select * from move where moveid = :moveid"; OracleCommand cmd = new OracleCommand(sql, con); cmd.Parameters.Add(":moveid", OracleDbType.Int32); cmd.Parameters[":moveid"].Value = RemoveID; OracleDataReader DataReader = cmd.ExecuteReader(); if (DataReader.Read()) { int id = int.Parse(DataReader["moveid"].ToString()); int numbers = int.Parse(DataReader["numbers"].ToString()); DateTime time = (DateTime)DataReader["time"]; int warehouseid = int.Parse(DataReader["warehouseid"].ToString()); int employeeid = int.Parse(DataReader["employeeid"].ToString()); MoveRecord.RemoveID = id; MoveRecord.RemoveTotal = numbers; MoveRecord.RemoveTime = time; // MoveRecord.WareHouse.WareHouseID = warehouseid; IEmployeeDao eDao = new EmployeeDao(); // MoveRecord.Employee = eDao.getSingleEmployee(employeeid); MoveRecord.Employee.EmployeeID = employeeid; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { if (con.State == ConnectionState.Open) { con.Close(); } } return(MoveRecord); }
static int get_CurrentPos(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); MoveRecord obj = (MoveRecord)o; UnityEngine.Vector3 ret = obj.CurrentPos; ToLua.Push(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index CurrentPos on a nil value" : e.Message)); } }
static int get_m_MoveRecord(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); ScrollObject obj = (ScrollObject)o; MoveRecord ret = obj.m_MoveRecord; ToLua.PushObject(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index m_MoveRecord on a nil value" : e.Message)); } }
static int set_CurrentPos(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); MoveRecord obj = (MoveRecord)o; UnityEngine.Vector3 arg0 = ToLua.ToVector3(L, 2); obj.CurrentPos = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index CurrentPos on a nil value" : e.Message)); } }
static int set_m_MoveRecord(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); ScrollObject obj = (ScrollObject)o; MoveRecord arg0 = (MoveRecord)ToLua.CheckObject(L, 2, typeof(MoveRecord)); obj.m_MoveRecord = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index m_MoveRecord on a nil value" : e.Message)); } }
private void Start() { //initialize board board = new int[size, size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { board[i, j] = 0; } } //randomly assign player pieces int pieceIndex = Random.Range(0, pieces.Count); playerOnePiece = pieces[pieceIndex]; List <GameObject> newSelection = new List <GameObject>(); for (int i = 0; i < pieces.Count; i++) { if (i != pieceIndex) { newSelection.Add(pieces[i]); } } playerTwoPiece = newSelection[Random.Range(0, newSelection.Count)]; //Functionality for buttons that appear when the game is over buttons = GameObject.Find("ButtonsObject"); if (buttons == null) { Debug.Log("Unable to find reference to ButtonsObject"); } else { buttons.SetActive(false); } //Setting up the move recorder //since board is zero indexed, { -1, -1 } is functionally the empty board move MoveRecord initialBoardState = new MoveRecord(new int[] { -1, -1 }, false); moveRecorder = new MoveRecorder(); moveRecorder.Turn(initialBoardState, null); }
//只负责初始化员工的id,仓库的id List <MoveRecord> IMoveRecordDao.getAllMoveRecordList(DateTime starttime, DateTime endtime) { List <MoveRecord> MoveRecordList = new List <MoveRecord>(); try { if (con.State == ConnectionState.Closed) { con.Open(); } string sql = "select * from move where time between :S_time and :E_time"; OracleCommand cmd = new OracleCommand(sql, con); cmd.Parameters.Add(":S_time", OracleDbType.TimeStamp); cmd.Parameters.Add(":E_time", OracleDbType.TimeStamp); cmd.Parameters[0].Value = starttime; cmd.Parameters[1].Value = endtime; OracleDataReader DataReader = cmd.ExecuteReader(); while (DataReader.Read()) { MoveRecord moverecord = new MoveRecord(); int id = int.Parse(DataReader["moveid"].ToString()); int numbers = int.Parse(DataReader["numbers"].ToString()); DateTime time = (DateTime)DataReader["time"]; int warehouseid = int.Parse(DataReader["warehouseid"].ToString()); int employeeid = int.Parse(DataReader["employeeid"].ToString()); moverecord.RemoveID = id; moverecord.RemoveTotal = numbers; moverecord.RemoveTime = time; moverecord.WareHouse.WareHouseID = warehouseid; moverecord.Employee.EmployeeID = employeeid; MoveRecordList.Add(moverecord); } } catch (Exception ex) { Console.Out.WriteLine(ex.ToString()); } finally { con.Close(); } return(MoveRecordList); }
//只负责初始化员工的id,仓库的id List <MoveRecord> IMoveRecordDao.getAllMoveRecordList() { List <MoveRecord> MoveRecordList = new List <MoveRecord>(); try { if (con.State == ConnectionState.Closed) { con.Open(); } string sql = "select * from move"; OracleCommand cmd = new OracleCommand(sql, con); OracleDataReader DataReader = cmd.ExecuteReader(); while (DataReader.Read()) { MoveRecord moverecord = new MoveRecord(); int id = int.Parse(DataReader["moveid"].ToString()); int numbers = int.Parse(DataReader["numbers"].ToString()); DateTime time = (DateTime)DataReader["time"]; int warehouseid = int.Parse(DataReader["warehouseid"].ToString()); int employeeid = int.Parse(DataReader["employeeid"].ToString()); moverecord.RemoveID = id; moverecord.RemoveTotal = numbers; moverecord.RemoveTime = time; moverecord.WareHouse.WareHouseID = warehouseid; moverecord.Employee.EmployeeID = employeeid; MoveRecordList.Add(moverecord); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { con.Close(); } return(MoveRecordList); }
public void Turn(MoveRecord move, Node previousMove) { Node turn = new Node(move); if (head == null) { head = turn; } if (previousMove == null) { turn.SetPrev(head); } else { turn.SetPrev(previousMove); } previousMove.SetNext(turn); turn.SetNext(null); tail = turn; }
static int _CreateMoveRecord(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 0) { MoveRecord obj = new MoveRecord(); ToLua.PushObject(L, obj); return(1); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to ctor method: MoveRecord.New")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
//place pieces on board public void InstantiatePiece(GameObject tile, GameObject piecePrefab, int scoreInt) { TileControl tileControl = tile.GetComponent <TileControl>(); GameObject piece = Instantiate(piecePrefab, transform.position, Quaternion.identity) as GameObject; piece.transform.parent = tile.transform; piece.transform.localPosition = Vector2.zero; playerOneTurn = false; tileControl.SetIsPlaceable(false); tileControl.GetSprite().color = Color.white; board[tileControl.location[0], tileControl.location[1]] = scoreInt; MoveRecord turn = new MoveRecord(tileControl.location, playerOneTurn); moveRecorder.Turn(turn, previousMove); if (turnNumber >= (size * 2) - 1) { CheckWin(tileControl.location); } }
public static int RecursiveAutoSolve(int diskNumber, int pTower1, int pTower3, int pTower2, Queue <MoveRecord> pQueue, int pNumberOfMoves) { Queue <MoveRecord> tempMoveQueue = pQueue; MoveRecord tempMoveRecord; int tempMoves = pNumberOfMoves; if (diskNumber == 1) { tempMoveRecord = new MoveRecord(tempMoves, diskNumber, pTower1, pTower3); tempMoveQueue.Enqueue(tempMoveRecord); tempMoves++; return(tempMoves); } tempMoves = RecursiveAutoSolve(diskNumber - 1, pTower1, pTower2, pTower3, tempMoveQueue, tempMoves); tempMoveRecord = new MoveRecord(tempMoves, diskNumber, pTower1, pTower3); tempMoveQueue.Enqueue(tempMoveRecord); tempMoves++; return(RecursiveAutoSolve(diskNumber - 1, pTower2, pTower3, pTower1, tempMoveQueue, tempMoves)); }
private void confirmGoodButton_Click(object sender, RoutedEventArgs e) { IWareHouseDao whd = new WareHouseDao(); IMoveRecordDao mrd = new MoveRecordDao(); IGoodDao igd = new GoodDao(); MoveRecord moverecord = new MoveRecord(); List <WareHouse> warehouseList = whd.getWareHouseList(); Good good = new Good(); bool find = false; for (int j = 0; j < warehouseList.Count; j++) { if (Convert.ToInt32(warehouseIdBox.Text) == warehouseList[j].WareHouseID) { find = true; moverecord.WareHouse = warehouseList[j]; for (int i = 0; i < dt.Rows.Count; i++) { //遍历查询仓库 good = igd.getSingleGood(Convert.ToInt32(dt.Rows[i][0])); moverecord.addGood(good, Convert.ToInt32(dt.Rows[i][2])); } } } if (!find) { MessageBox.Show("仓库不存在!"); } else { DateTime now = DateTime.Now; moverecord.RemoveTime = now; mrd.addmove(moverecord); } //提交采购单后清空 dt.Clear(); dataGridDetail.ItemsSource = dt.DefaultView; }
public MoveRecord Move(int from, int to) { MoveRecord theRecord; int theDisc; if (from < 1 || from > 3) { throw new InvalidMoveException("Invalid tower value. Valid values for 'From': '1', '2', '3', or 'x' "); } if (to < 1 || to > 3) { throw new InvalidMoveException("Invalid tower value. Valid values for 'To': '1', '2', '3', or enter"); } if (from == to) { throw new InvalidMoveException("Move cancelled."); } if (threePoles[from - 1].Count == 0) { throw new InvalidMoveException($"Tower {from} is empty."); } if (threePoles[to - 1].Count != 0 && threePoles[from - 1].Peek() > threePoles[to - 1].Peek()) { throw new InvalidMoveException($"Top disc of tower {from} is larger than top disc on tower {to}"); } else { theDisc = threePoles[from - 1].Pop(); threePoles[to - 1].Push(theDisc); NumberOfMoves++; theRecord = new MoveRecord(NumberOfMoves, theDisc, from, to, new Towers(this)); if (threePoles[0].Count == 0 && threePoles[1].Count == 0) { IsComplete = true; } } return(theRecord); }
private async void LinkMoved(MoveRecord moveRecord) => await repoService.LinkMoved(Data, moveRecord);
//负责添加一条记录,初始化记录的移出时间,移出仓库,移出员工(只要id)就行,然后添加,移出商品以及总数, bool IMoveRecordDao.addmove(MoveRecord moveRecord) { bool flag = true; if (con.State == ConnectionState.Closed) { con.Open(); } // OracleTransaction transaction = con.BeginTransaction(); try { // string max = "select max(moveid) from move"; // OracleCommand cmd = new OracleCommand(max, con); // string next = cmd.ExecuteScalar().ToString(); // int moveid = 0; // if (next == "") moveid = 1; // else moveid = int.Parse(next)+1; string sql = "insert into Move values(null,:numbers,:time,:warehouseid,:employeeid)"; OracleCommand cmd = new OracleCommand(sql, con); // cmd.Parameters.Add(":moveid", OracleDbType.Int32); cmd.Parameters.Add(":numbers", OracleDbType.Int32); cmd.Parameters.Add(":time", OracleDbType.TimeStamp); cmd.Parameters.Add(":warehouseid", OracleDbType.Int32); cmd.Parameters.Add(":employeeid", OracleDbType.Int32); // cmd.Parameters[0].Value = moveRecord.RemoveID; cmd.Parameters[0].Value = moveRecord.RemoveTotal; cmd.Parameters[1].Value = moveRecord.RemoveTime; cmd.Parameters[2].Value = moveRecord.WareHouse.WareHouseID; cmd.Parameters[3].Value = moveRecord.Employee.EmployeeID; cmd.ExecuteNonQuery(); string max = "select max(moveid) from move"; cmd = new OracleCommand(max, con); string next = cmd.ExecuteScalar().ToString(); int moveid = 0; if (next == "") { moveid = 1; } else { moveid = int.Parse(next); } Dictionary <Good, int> temp = moveRecord.Good_Remove; foreach (Good good in temp.Keys) { int goodid = good.GoodID; int amount = temp[good]; string insert = "insert into move_good values(:goodid,:moveid,:amount)"; cmd = new OracleCommand(insert, con); cmd.Parameters.Add(":goodid", OracleDbType.Int32); cmd.Parameters.Add(":moveid", OracleDbType.Int32); cmd.Parameters.Add(":amount", OracleDbType.Int32); cmd.Parameters[0].Value = goodid; cmd.Parameters[1].Value = moveid; cmd.Parameters[2].Value = amount; cmd.ExecuteNonQuery(); OracleCommand cmd1 = new OracleCommand(); cmd1.Connection = con; //存储过程 cmd1.CommandType = CommandType.StoredProcedure; cmd1.CommandText = "MYSUPERMAKET.MOVE_GOOD_FROM_WAREHOUSE"; cmd1.Parameters.Add("good_id", OracleDbType.Int32); cmd1.Parameters.Add("warehouseid", OracleDbType.Int32); cmd1.Parameters.Add("quantity", OracleDbType.Int32); cmd1.Parameters[0].Direction = ParameterDirection.Input; cmd1.Parameters[1].Direction = ParameterDirection.Input; cmd1.Parameters[2].Direction = ParameterDirection.Input; cmd1.Parameters[0].Value = goodid; cmd1.Parameters[1].Value = moveRecord.WareHouse.WareHouseID; cmd1.Parameters[2].Value = amount; cmd1.ExecuteNonQuery(); } // transaction.Commit(); } catch (Exception e) { MessageBox.Show(e.ToString()); // transaction.Rollback(); flag = false; } return(flag); }
public Node(MoveRecord move) { m = move; }