BlockScript









How do I use Block Script
Below are practical examples compiled from projects for learning and reference purposes

Featured Snippets


File name: ConnectorScript.cs Copy
91  private Color getConnectorColor(){
92   Color standardColor = new Color(0,0.5f, 0);
93   Color highlightedColor = new Color(0f, 0f, 1f);
94   int block0;
95   int block1;
96   int block2;
97   int blockPosition;
98
99   if (this.axis == "x") {
100    blockPosition = this.x;
101    block0 = this.GetBlockNumber(0,this.y, this.z);
102    block1 = this.GetBlockNumber(1,this.y, this.z);
103    block2 = this.GetBlockNumber(2,this.y, this.z);
104   }
105   else if (this.axis == "y") {
106    blockPosition = this.y;
107    block0 = this.GetBlockNumber(this.x,0, this.z);
108    block1 = this.GetBlockNumber(this.x,1, this.z);
109    block2 = this.GetBlockNumber(this.x,2, this.z);
110   }
111   else if (this.axis == "z") {
112    blockPosition = this.z;
113    block0 = this.GetBlockNumber(this.x,this.y, 0);
114    block1 = this.GetBlockNumber(this.x,this.y, 1);
115    block2 = this.GetBlockNumber(this.x,this.y, 2);
116   }
117   else { //not quite sure why axis isn't set but throwing error
118    return standardColor;
119   }
120
121   //no highlighting needed since connector isn't visible
122   if (blockPosition == 2) return standardColor;
123
124   //middle block is blank and first and second blocks match
125   if (block1 == BlockScript.emptyBlock
126       && block0 != BlockScript.emptyBlock
127       && block0 == block2) return highlightedColor;
128
129   //if this block is empty then return standard color
130   if (blockPosition == BlockScript.emptyBlock) return standardColor;
131
132   //if the next matches
133   if(blockPosition == 0 && block0 == block1 && block0 != BlockScript.emptyBlock) return highlightedColor;
134   if(blockPosition == 1 && block1 == block2 && block1 != BlockScript.emptyBlock) return highlightedColor;
135
136   //set the default color
137   return standardColor;
138  }
File name: GameControllerScript.cs Copy
48  void Start (){
49
50   int x;
51   int y;
52   int z;
53   int axis;
54   yOffset = 1F;
55   Transform blockInstance;
56   BlockScript blockScript;
57   ConnectorScript connectorScript;
58   Transform connectorInstance;
59   TextMesh textMesh;
60
61   this.gameView = "menu";
62   this.options = this.gameObject.GetComponent ("OptionsScript") as OptionsScript;
63   this.timer = this.gameObject.GetComponent ("TimerScript") as TimerScript;
64   this.sizeGUI();
65
66   this.options.InitOptions();
67
68   //setup audio sources
69
70   AudioSource[] audioSources = GetComponents();
71   this.swipeAudioSource = audioSources[0];
72   this.collideAudioSource = audioSources[1];
73   this.collideAudioSource.clip = this.collideSound;
74
75   //instantiate the blocks and connectors and position them
76   for (x = 0; x <= 2; x++) {
77    for (y = 0; y <= 2; y++) {
78     for (z = 0; z <= 2; z++) {
79      //instantiate the block
80      blockInstance = Instantiate (block, new Vector3(x * this.scale, y * this.scale + this.yOffset, z * this.scale), Quaternion.identity) as Transform;
81      this.blocks[x,y,z] = blockInstance;
82      blockScript = blockInstance.gameObject.GetComponent("BlockScript") as BlockScript;
83      blockScript.Initialize(x,y,z,this);
84     }
85    }
86   }
87
88   // instantiate the connectors
89   for (x = 0; x <= 2; x++) {
90    for (y = 0; y <= 2; y++) {
91     for (z = 0; z <= 2; z++) {
92      //instantiate the x connector
93      connectorInstance = Instantiate (connector) as Transform;
94      connectorScript = connectorInstance.gameObject.GetComponent("ConnectorScript") as ConnectorScript;
95      connectorScript.Initialize(x,y,z,"x", this);
96      this.connectors[x,y,z,0] = connectorInstance;
97
98      //instantiate the y connector
99      connectorInstance = Instantiate (connector) as Transform;
100      connectorScript = connectorInstance.gameObject.GetComponent("ConnectorScript") as ConnectorScript;
101      connectorScript.Initialize(x,y,z,"y", this);
102      this.connectors[x,y,z,1] = connectorInstance;
103
104      //instantiate the z connector
105      connectorInstance = Instantiate (connector) as Transform;
106      connectorScript = connectorInstance.gameObject.GetComponent("ConnectorScript") as ConnectorScript;
107      connectorScript.Initialize(x,y,z,"z", this);
108      this.connectors[x,y,z,2] = connectorInstance;
109     }
110    }
111   }
112
113   //instantiate the move blocks
114   if (PlayerPrefs.HasKey ("game_status")) {
115    this.loadSavedGame();
116   }
117   else {
118    this.restart ();
119   }
120  }
File name: GameControllerScript.cs Copy
122  void setBlockNumber ( Transform blockInstance , int blockNumber ){
123   BlockScript blockScript;
124   blockScript = blockInstance.gameObject.GetComponent("BlockScript") as BlockScript;
125   blockScript.setBlockNumber(blockNumber);
126  }
File name: GameControllerScript.cs Copy
128  public int getBlockNumber ( Transform blockInstance ){
129   BlockScript blockScript;
130   blockScript = blockInstance.gameObject.GetComponent("BlockScript") as BlockScript;
131   return blockScript.blockNumber;
132  }
File name: GameControllerScript.cs Copy
223  private bool fillRandomBlock (ref int x, ref int y, ref int z, ref int newNumber) {
224   List emptyBlocks = this.getEmptyBlocks();
225   int emptyIndex;
226   BlockScript blockScript;
227
228   if (emptyBlocks.Count > 0) {
229    emptyIndex = Random.Range(0, emptyBlocks.Count);
230    if(this.options.use_0) {
231     newNumber = Random.Range(0,3) * 2;
232    }
233    else {
234     newNumber = Random.Range(1,3) * 2;
235    }
236    this.setBlockNumber(emptyBlocks[emptyIndex], newNumber);
237    blockScript = emptyBlocks[emptyIndex].GetComponent("BlockScript") as BlockScript;
238    x = blockScript.x;
239    y = blockScript.y;
240    z = blockScript.z;
241    return true;
242   }
243
244   //no empty blocks to return
245   return false;
246  }
File name: GameControllerScript.cs Copy
248  private void adjustConnectors() {
249   int j, k, axis;
250   ConnectorScript connectorScript;
251   bool show;
252// for (j = 0; j <= 2; j++) {
253// for (k = 0; k <= 2; k++) {
254// for (axis = 0; axis <= 2; axis++) {
255// connectorScript = this.connectors[j,k,axis].gameObject.GetComponent("ConnectorScript") as ConnectorScript;
256// connectorScript.show = true;
257//
258// if (this.options.board_type == "Hollow Cube") {
259// if(j == 1 & k == 1) {
260// connectorScript.show = false;
261// }
262// }
263//
264// if (this.options.board_type == "Box Outline") { //Box Outline
265// if(j == 1 || k == 1) {
266// connectorScript.show = false;
267// }
268// }
269//
270// if (this.options.board_type == "Four Walls") {
271// //remove center connector on the x axis
272// if(axis == 0 && j == 1 & k == 1) {
273// connectorScript.show = false;
274// }
275// //remove 3 center connectors on the y axis
276// if(axis == 1 && j == 1) {
277// connectorScript.show = false;
278// }
279// //remove 3 center connectors on the z axis
280// if(axis == 2 && k == 1) {
281// connectorScript.show = false;
282// }
283// }
284//
285//
286// if (this.options.board_type == "No Corners") {
287// if(j != 1 && k != 1) {
288// connectorScript.show = false;
289// }
290// }
291// }}}
292  }
293
294  public bool doMove (string axis, int direction) {
295   int loop1, loop2; //looping variables
296   int x, y, z; //block location variables
297   int numMoves = 0; //number of moves to make
298   int scoreChange = 0;
299   bool blockCollision = false;
300   bool blockCollisionSound = false;
301   Transform blockA, blockB, blockC; //variables for holding the three blocks in a row
302   IDictionary newNumbers = new Dictionary(); //new numbers for blocks a,b & c to have
303   IDictionary shiftBy = new Dictionary(); //distance for blocks a,b & c to shift
304   int[,,] numbersAfterMove = new int[3,3,3];
305;
306   if (PlayerPrefs.GetString ("game_status") != "playing") return false;
307   if (this.gameView != "game") return false;
308
309   //loop through each of the 9 rows to be calculated
310   for(loop1 = 0; loop1 <=2; loop1++) {
311    for(loop2 = 0; loop2 <=2; loop2++) {
312     if (axis == "x") {
313      y = loop1;
314      z = loop2;
315      if (direction == 1) {
316       blockA= this.blocks[0,y,z];
317       blockB= this.blocks[1,y,z];
318       blockC= this.blocks[2,y,z];
319      }
320      else {
321       blockA= this.blocks[2,y,z];
322       blockB= this.blocks[1,y,z];
323       blockC= this.blocks[0,y,z];
324      }
325     }
326     else if (axis == "y") {
327      x = loop1;
328      z = loop2;
329      if (direction == 1) {
330       blockA= this.blocks[x,0,z];
331       blockB= this.blocks[x,1,z];
332       blockC= this.blocks[x,2,z];
333      }
334      else {
335       blockA= this.blocks[x,2,z];
336       blockB= this.blocks[x,1,z];
337       blockC= this.blocks[x,0,z];
338      }
339     }
340     else {
341      x = loop1;
342      y = loop2;
343      if (direction == 1) {
344       blockA= this.blocks[x,y,0];
345       blockB= this.blocks[x,y,1];
346       blockC= this.blocks[x,y,2];
347      }
348      else {
349       blockA= this.blocks[x,y,2];
350       blockB= this.blocks[x,y,1];
351       blockC= this.blocks[x,y,0];
352      }
353     }
354     calculateRowChanges(this.getBlockNumber(blockA), this.getBlockNumber(blockB), this.getBlockNumber(blockC), ref scoreChange, ref newNumbers, ref shiftBy, ref blockCollision);
355
356     blockA.GetComponent().move (axis, shiftBy["a"] * direction, this.scale, newNumbers["a"]);
357     blockB.GetComponent().move (axis, shiftBy["b"] * direction, this.scale, newNumbers["b"]);
358     blockC.GetComponent().move (axis, shiftBy["c"] * direction, this.scale, newNumbers["c"]);
359
360     numMoves = numMoves + shiftBy["a"] + shiftBy["b"] + shiftBy["c"];
361     if (blockCollision) blockCollisionSound = true;
362
363     int newHighestBlock = 0;
364     if(newNumbers["a"] > PlayerPrefs.GetInt ("game_highest_block")) newHighestBlock = newNumbers["a"];
365     if(newNumbers["b"] > PlayerPrefs.GetInt ("game_highest_block")) newHighestBlock = newNumbers["b"];
366     if(newNumbers["c"] > PlayerPrefs.GetInt ("game_highest_block")) newHighestBlock = newNumbers["c"];
367
368     if (newHighestBlock > 0) {
369      PlayerPrefs.SetInt ("game_highest_block", newHighestBlock);
370      if (newHighestBlock == 2048) PlayerPrefs.SetString("game_status","game_won");
371      PlayerPrefs.Save ();
372      this.timer.SetNextBlockTarget(newHighestBlock);
373      if (newHighestBlock > this.getHighestBlock()) this.SetHighestBlock(newHighestBlock);
374     }
375
376
377
378
379     PlayerPrefs.Save ();
380
381     //save the numbers after the move for redo
382     numbersAfterMove[blockA.GetComponent().x,
383                      blockA.GetComponent().y,
384                      blockA.GetComponent().z] = newNumbers["a"];
385
386     numbersAfterMove[blockB.GetComponent().x,
387                      blockB.GetComponent().y,
388                      blockB.GetComponent().z] = newNumbers["b"];
389
390     numbersAfterMove[blockC.GetComponent().x,
391                      blockC.GetComponent().y,
392                      blockC.GetComponent().z] = newNumbers["c"];
393    }
394   }
395
396   if(blockCollisionSound && this.options.play_sounds) {
397    this.collideAudioSource.PlayDelayed(this.moveDuration);
398   }
399
400   if (numMoves > 0) {
401    this.moveStartTime = Time.time;
402    this.setScore (this.score + scoreChange);
403    if(this.options.play_sounds) {
404     if (axis == "x") this.swipeAudioSource.PlayOneShot(swipeSoundX);
405     if (axis == "y") this.swipeAudioSource.PlayOneShot(swipeSoundY);
406     if (axis == "z") this.swipeAudioSource.PlayOneShot(swipeSoundZ);
407    }
408    return true;
409   }
410   else {
411    return false;
412   }
413  }
414
415  //Determine the possible successful combines between 3 blockNumbers (a,b,c) being pushed toward c
416  void calculateRowChanges (int a, int b, int c, ref int scoreChange, ref IDictionary newNumbers, ref IDictionary shiftBy, ref bool blockCollision ) {
417   blockCollision = false;
418
419   //first check if we have any -2 values which signify that blocks cant merge along this connector
420   if(a == -2 || b == -2 || c == -2) {
421    newNumbers["a"] = a;
422    newNumbers["b"] = b;
423    newNumbers["c"] = c;
424    shiftBy["a"] = 0;
425    shiftBy["b"] = 0;
426    shiftBy["c"] = 0;
427   }
428   else {
429   //figure out if any of the three merges occurred
430    shiftBy ["c"] = 0;
431    if (c > -1 && c == b) { //b and c merged
432     scoreChange = scoreChange + c*2;
433     blockCollision = true;
434     newNumbers["c"] = c*2;
435     newNumbers["b"] = a;
436     newNumbers["a"] = -1;
437     shiftBy["b"] = 1;
438     if(a > -1) {
439      shiftBy["a"] = 1;
440     }
441     else if (a == -1) {
442      shiftBy["a"] = 0;
443     }
444    }
445    else if (b > -1 && a == b) { //a and b merged
446     scoreChange = scoreChange + a*2;
447     blockCollision = true;
448     if(c == -1) {
449      newNumbers["c"] = b*2;
450      newNumbers["b"] = -1;
451      newNumbers["a"] = -1;
452      shiftBy["b"] = 1;
453      shiftBy["a"] = 2;
454     }
455     else {
456      newNumbers["c"] = c;
457      newNumbers["b"] = b*2;
458      newNumbers["a"] = -1;
459      shiftBy["b"] = 0;
460      shiftBy["a"] = 1;
461     }
462    }
463    else if (c > -1 && a == c && b == -1) { //a and c merged
464     scoreChange = scoreChange + c*2;
465     blockCollision = true;
466     newNumbers["c"] = c*2;
467     newNumbers["b"] = -1;
468     newNumbers["a"] = -1;
469     shiftBy["b"] = 0;
470     shiftBy["a"] = 2;
471    } //end of merges block
472    else { //no merges occurred
473     if(c > -1) { //last column has number
474      newNumbers["c"] = c;
475      if(b > -1) { //second column has number
476       newNumbers["b"] = b;
477       newNumbers["a"] = a;
478       shiftBy["b"] = 0;
479       shiftBy["a"] = 0;
480      }
481      else if(b == -1) {//second column empty
482       newNumbers["b"] = a;
483       newNumbers["a"] = -1;
484       shiftBy["b"] = 0;
485       if (a == -1) {
486        shiftBy["a"] = 0;
487       }
488       else {
489        shiftBy["a"] = 1;
490       }
491      }
492
493     } //end of block for value in c column
494     else if (c == -1) { //first column empty
495      if(b > -1) { //second column has number
496       newNumbers["c"] = b;
497       newNumbers["b"] = a;
498       newNumbers["a"] = -1;
499       shiftBy["b"] = 1;
500       if(a > -1) {
501        shiftBy["a"] = 1;
502       }
503       else {
504        shiftBy["a"] = 0;
505       }
506
507      }
508      else if(b == -1) { //second column empty and first column empty
509       newNumbers["c"] = a;
510       newNumbers["b"] = -1;
511       newNumbers["a"] = -1;
512       shiftBy["b"] = 0;
513       if (a == -1) {
514        shiftBy["a"] = 0;
515       }
516       else {
517        shiftBy["a"] = 2;
518       }
519      }
520     }
521    } //end of no merges block
522   } //end of check for -2;
523  }
524
525
526  void Update (){
527   int x =0, y=0, z=0, newNumber=0;
528   if(GameControllerScript.performRestart) {
529    this.restart ();
530    GameControllerScript.performRestart = false;
531   }
532   if(moveStartTime >= 0) {
533    if(Time.time - this.moveStartTime > this.moveDuration + 0.05F) {
534     this.fillRandomBlock(ref x, ref y, ref z, ref newNumber);
535     this.saveHistory ();
536     this.moveStartTime = -1F;
537     if(this.getEmptyBlocks().Count == 0) {
538      if(this.CheckGameOver()) {
539       PlayerPrefs.SetString ("game_status", "game_over");
540       PlayerPrefs.Save();
541      }
542     }
543    }
544   }
545   else {
546    bool moved;
547    if (Input.GetKeyUp("right")) moved = this.doMove ("x", 1);
548    if (Input.GetKeyUp("left")) moved = this.doMove ("x", -1);
549    if (Input.GetKeyUp("up")) moved = this.doMove ("y", 1);
550    if (Input.GetKeyUp("down")) moved = this.doMove ("y", -1);
551    if (Input.GetKeyUp("a")) moved = this.doMove ("z", 1);
552    if (Input.GetKeyUp("z")) moved = this.doMove ("z", -1);
553   }
554   this.adjustConnectors();
555   if (Input.GetKey(KeyCode.Escape))
556   {
557    Application.Quit();
558   }
559  }
560
561  void FixedUpdate () {
562  }
563
564  void setScore(int score) {
565   this.score = score;
566   PlayerPrefs.SetInt ("score", score);
567
568   //handle setting high score
569   if(this.score > this.GetHighScore()) {
570    this.SetHighScore(this.score);
571   }
572  }
573
574  public void restart() {
575   int[,,] positions = new int[3, 3, 3];
576   int x=0, y=0, z=0, newNumber=0;
577   this.gameLight.intensity = this.lightIntensity;
578
579   for (x = 0; x <= 2; x++) {
580    for (y = 0; y <= 2; y++) {
581     for (z = 0; z <= 2; z++) {
582      this.setBlockNumber(this.blocks[x,y,z], this.getInitialBlockNumber(x,y,z));
583      positions[x,y,z] = -1;
584     }
585    }
586   }
587
588   this.adjustConnectors ();
589
590   PlayerPrefs.SetString ("redo_moves2","");
591   PlayerPrefs.SetString ("redo_moves1","");
592   PlayerPrefs.SetString ("redo_moves0","");
593   PlayerPrefs.SetInt ("redos", 2);
594   PlayerPrefs.SetString ("game_status", "playing");
595   PlayerPrefs.SetInt ("game_highest_block", 0);
596   PlayerPrefs.SetInt ("cube_rotation_x", 0);
597   PlayerPrefs.SetInt ("cube_rotation_y", 0);
598   PlayerPrefs.SetInt ("cube_rotation_z", 0);
599   PlayerPrefs.Save ();
600
601   this.fillRandomBlock(ref x, ref y, ref z, ref newNumber);
602   positions [x, y, z] = newNumber;
603   this.fillRandomBlock(ref x, ref y, ref z, ref newNumber);
604   positions [x, y, z] = newNumber;
605   this.saveHistory();
606
607   this.setScore (0);
608
609   TimerScript timerScript = this.gameObject.GetComponent ("TimerScript") as TimerScript;
610   timerScript.ResetTimer();
611  }
612
613  public int GetHighScore()
614  {
615   string key = "highscore-" + options.GetOptionsKey();
616   if (PlayerPrefs.HasKey (key)) {
617    return PlayerPrefs.GetInt (key);
618   }
619   else {
620    this.SetHighScore(0);
621    return 0;
622   }
623  }
624
625  void SetHighScore(int myHighScore)
626  {
627   string key = "highscore-" + options.GetOptionsKey();
628   PlayerPrefs.SetInt( key, myHighScore );
629   PlayerPrefs.Save();
630  }
631
632  public int getHighestBlock()
633  {
634   string key = "highestblock-" + options.GetOptionsKey();
635   if (PlayerPrefs.HasKey (key)) {
636    return PlayerPrefs.GetInt (key);
637   }
638   else {
639    this.SetHighestBlock(0);
640    return 0;
641   }
642  }
643
644  void SetHighestBlock(int highestBlock)
645  {
646   string key = "highestblock-" + options.GetOptionsKey();
647   PlayerPrefs.SetInt( key, highestBlock );
648   PlayerPrefs.Save();
649  }
650
651  private bool CheckGameOver() {
652
653   string[] axisList = new string[3] {"x", "y", "z"};
654   int direction = 1;
655   string axis = "x";
656   int loop1, loop2, loopAxis; //looping variables
657   int x, y, z; //block location variables
658   int numMoves = 0; //number of moves to make
659   int scoreChange = 0;
660   bool blockCollision = false;
661   Transform blockA, blockB, blockC; //variables for holding the three blocks in a row
662   IDictionary newNumbers = new Dictionary(); //new numbers for blocks a,b & c to have
663   IDictionary shiftBy = new Dictionary(); //distance for blocks a,b & c to shift
664
665   //loop through each of the 9 rows to be calculated
666   for(loopAxis = 0; loopAxis < 3; loopAxis ++) {
667    axis = axisList[loopAxis];
668   for(direction = -1; direction < 2; direction += 2) {
669   for(loop1 = 0; loop1 <=2; loop1++) {
670   for(loop2 = 0; loop2 <=2; loop2++) {
671    if (axis == "x") {
672     y = loop1;
673     z = loop2;
674     if (direction == 1) {
675      blockA= this.blocks[0,y,z];
676      blockB= this.blocks[1,y,z];
677      blockC= this.blocks[2,y,z];
678     }
679     else {
680      blockA= this.blocks[2,y,z];
681      blockB= this.blocks[1,y,z];
682      blockC= this.blocks[0,y,z];
683     }
684    }
685    else if (axis == "y") {
686     x = loop1;
687     z = loop2;
688     if (direction == 1) {
689      blockA= this.blocks[x,0,z];
690      blockB= this.blocks[x,1,z];
691      blockC= this.blocks[x,2,z];
692     }
693     else {
694      blockA= this.blocks[x,2,z];
695      blockB= this.blocks[x,1,z];
696      blockC= this.blocks[x,0,z];
697     }
698    }
699    else {
700     x = loop1;
701     y = loop2;
702     if (direction == 1) {
703      blockA= this.blocks[x,y,0];
704      blockB= this.blocks[x,y,1];
705      blockC= this.blocks[x,y,2];
706     }
707     else {
708      blockA= this.blocks[x,y,2];
709      blockB= this.blocks[x,y,1];
710      blockC= this.blocks[x,y,0];
711     }
712    }
713    calculateRowChanges(this.getBlockNumber(blockA), this.getBlockNumber(blockB), this.getBlockNumber(blockC), ref scoreChange, ref newNumbers, ref shiftBy, ref blockCollision);
714
715    numMoves = numMoves + shiftBy["a"] + shiftBy["b"] + shiftBy["c"];
716   }
717   }
718   }
719   }
720   if (numMoves > 0) {
721    return false;
722   }
723   else {
724    return true;
725   }
726  }
727
728  void OnGUI() {
729   //GAME GUI
730   if (this.gameView == "game") {
731    GUI.skin = currentGUISkin;
732    this.gameLight.intensity = this.lightIntensity;
733    this.mainCamera.transform.eulerAngles = new Vector3 (16F, 29.5F, 0);
734
735    //create rotating buttons
736
737
738
739    if (PlayerPrefs.GetString ("game_status") == "game_over") {
740     GUI.Label (new Rect (0, Screen.height * 0.3f , Screen.width, Screen.height * 0.10F), "Game Over", "BigLabel");
741     this.gameLight.intensity = 0;
742    }
743    if (PlayerPrefs.GetString ("game_status") == "game_won") {
744     GUI.Label (new Rect (0, Screen.height * 0.3f , Screen.width, Screen.height * 0.10F), "You Won!", "BigLabel");
745     if (GUI.Button(new Rect(Screen.width * .33f, Screen.height * 0.4F, Screen.width * 0.30F, Screen.height * 0.06F),"Continue")) {
746      PlayerPrefs.SetString ("game_status", "playing");
747      PlayerPrefs.Save ();
748     }
749     this.gameLight.intensity = 0;
750    }
751
752    GUI.Label (new Rect (0, 0, Screen.width, Screen.height * 0.06F), "Score: " + this.score.ToString (), "BigLabel");
753    string highScoreText = "High Score/Block: " + this.GetHighScore ().ToString () + " / " + this.getHighestBlock ().ToString ();
754    GUI.Label (new Rect (0, Screen.height * 0.06F, Screen.width, Screen.height / 10), highScoreText, "SmallLabel");
755
756
757    GUIStyle style = currentGUISkin.GetStyle ("button");
758    //style.fontSize = 14;
759
760    if (GUI.Button(new Rect(1, Screen.height * 0.12F, Screen.width * 0.30F, Screen.height * 0.06F),"Menu")) {
761     this.gameView = "menu";
762    }
763    if (GUI.Button(new Rect(Screen.width * .33f, Screen.height * 0.12F, Screen.width * 0.33F, Screen.height * 0.06F),"Restart")) {
764     this.restart();
765    }
766    if (GUI.Button(new Rect(Screen.width * .7f, Screen.height * 0.12F, Screen.width * .3f, Screen.height * 0.06F), "Undo (" + PlayerPrefs.GetInt ("redos").ToString () + ")")) {
767     this.undo();
768    }
769
770
771    //Roation buttons
772
773
774    //GUI.Label(new Rect(Screen.width * .8f, Screen.height * 0.72F, Screen.width * .1f, Screen.height * 0.06F), "", "RotateButton");
775
776    //left button
777    if (GUI.Button(new Rect(Screen.width * .73f, Screen.height * 0.72F, Screen.width * .1f, Screen.height * 0.06F), "\t", "RotateButtonLeft")) {
778     this.rotateBlocks(Vector3.up);
779    }
780    //right button
781    if (GUI.Button(new Rect(Screen.width * .87f, Screen.height * 0.72F, Screen.width * .1f, Screen.height * 0.06F), "", "RotateButtonRight")) {
782     this.rotateBlocks(Vector3.down);
783    }
784    //up button
785    if (GUI.Button(new Rect(Screen.width * .8f, Screen.height * 0.675F, Screen.width * .1f, Screen.height * 0.06F), "", "RotateButtonUp")) {
786     this.rotateBlocks(Vector3.right);
787    }
788    //down button
789    if (GUI.Button(new Rect(Screen.width * .8f, Screen.height * 0.765F, Screen.width * .1f, Screen.height * 0.06F), "", "RotateButtonDown")) {
790     this.rotateBlocks(Vector3.left);
791    }
792   }
793  }
794
795  private void sizeGUI() {
796   this.currentGUISkin.GetStyle ("Label").fontSize = Mathf.CeilToInt(Screen.height * 0.04F);
797   this.currentGUISkin.GetStyle ("Button").fontSize = Mathf.CeilToInt(Screen.height * 0.04F);
798   this.currentGUISkin.GetStyle ("Subheader").fontSize = Mathf.CeilToInt(Screen.height * 0.05F);
799   this.currentGUISkin.GetStyle ("Toggle").fontSize = Mathf.CeilToInt(Screen.height * 0.04F);
800   this.currentGUISkin.GetStyle ("ToggleLabel").fontSize = Mathf.CeilToInt(Screen.height * 0.04F);
801   this.currentGUISkin.GetStyle ("ToggleLabelWarning").fontSize = Mathf.CeilToInt(Screen.height * 0.04F);
802
803   this.currentGUISkin.GetStyle ("SmallLabel").fontSize = Mathf.CeilToInt(Screen.height * 0.03F);
804
805   this.currentGUISkin.GetStyle ("BigLabel").fontSize = Mathf.CeilToInt(Screen.height * 0.06F);
806
807   this.currentGUISkin.GetStyle ("Toggle").padding.top = Mathf.CeilToInt(Screen.height * 0.04F);
808   this.currentGUISkin.GetStyle ("Toggle").padding.left = Mathf.CeilToInt(Screen.height * 0.04F);
809  }
810
811  private void saveHistory() {
812   int x,y,z;
813   string stringVal = "";
814
815   //create comma separated list of values
816   for (x = 0; x <= 2; x++) {
817    for (y = 0; y <= 2; y++) {
818     for (z = 0; z <= 2; z++) {
819      stringVal = stringVal + getBlockNumber(this.blocks[x,y,z]).ToString() + ",";
820     }
821    }
822   }
823   //add score and highest block to end of array
824   stringVal = stringVal + this.score.ToString() + "," + PlayerPrefs.GetInt ("game_highest_block").ToString();
825
826   PlayerPrefs.SetString ("redo_moves2",PlayerPrefs.GetString ("redo_moves1"));
827   PlayerPrefs.SetString ("redo_moves1",PlayerPrefs.GetString ("redo_moves0"));
828   PlayerPrefs.SetString ("redo_moves0",stringVal);
829
830   PlayerPrefs.Save();
831  }
832
833  private void undo() {
834   string[] positions = new string[27];
835   int myNum = 0;
836   char[] separator = {','};
837
838   if( PlayerPrefs.GetString ("game_status") != "game_over"
839      && PlayerPrefs.GetString ("redo_moves1") != ""
840      && PlayerPrefs.GetInt ("redos") > 0
841   ) {
842    positions = PlayerPrefs.GetString ("redo_moves1").Split (separator);
843    //loop through and set the block numbers for each block
844    for (int x = 0; x <= 2; x++) {
845     for (int y = 0; y <= 2; y++) {
846      for (int z = 0; z <= 2; z++) {
847       int.TryParse(positions[9*x+3*y+z], out myNum);
848       this.setBlockNumber(this.blocks[x,y,z],myNum);
849      }
850     }
851    }
852
853    //roll back the score
854    int.TryParse (positions[27], out myNum);
855    this.setScore (myNum);
856
857    //roll back the game_highest_block
858    int.TryParse (positions[28], out myNum);
859    PlayerPrefs.SetInt ("game_highest_block", myNum);
860
861    //move all the redo moves back
862    PlayerPrefs.SetString ("redo_moves0",PlayerPrefs.GetString ("redo_moves1"));
863    PlayerPrefs.SetString ("redo_moves1",PlayerPrefs.GetString ("redo_moves2"));
864    PlayerPrefs.SetString ("redo_moves2","");
865    PlayerPrefs.SetInt ("redos", PlayerPrefs.GetInt ("redos") - 1);
866   }
867  }
868
869  private void rotateBlocks(Vector3 direction) {
870   Transform block;
871   BlockScript blockScript;
872   Transform connector;
873   ConnectorScript connectorScript;
874   this.rotating = true;
875   for (int x = 0; x <= 2; x++) {
876    for (int y = 0; y <= 2; y++) {
877     for (int z = 0; z <= 2; z++) {
878      block = this.blocks[x,y,z];
879      block.GetComponent().rotateBlock(direction);
880
881      for(int axis = 0; axis <=2; axis++) {
882       connector = this.connectors[x,y,z,axis];
883       connector.GetComponent().rotateConnector (direction);
884      }
885     }
886    }
887   }
888  }
889
890  private void loadSavedGame() {
891   string[] positions = new string[27];
892   int positionNum = 0;
893   char[] separator = {','};
894   positions = PlayerPrefs.GetString ("redo_moves0").Split (separator);
895
896   for (int x = 0; x <= 2; x++) {
897    for (int y = 0; y <= 2; y++) {
898     for (int z = 0; z <= 2; z++) {
899      int.TryParse(positions[9*x+3*y+z], out positionNum);
900      this.setBlockNumber(this.blocks[x,y,z],positionNum);
901     }
902    }
903   }
904
905
906   this.adjustConnectors ();
907   this.setScore (PlayerPrefs.GetInt ("score"));
908
909  }
910}
911
912
File name: GameManager.cs Copy
72     private void Restart()
73     {
74         foreach (var item in blocks)
75         {
76             item.SetActive(true);
77             item.GetComponent().InitializeColor();
78         }
79         Lives = 3;
80         Score = 0;
81     }

Download file with original file name:BlockScript

BlockScript 134 lượt xem

Gõ tìm kiếm nhanh...