Yufan Zhong / Mbed 2 deprecated GOLD_MINER

Dependencies:   mbed

Revision:
1:9c7bb3db32bc
Child:
2:fe0dbd155c4b
diff -r edf120185e12 -r 9c7bb3db32bc MinerEngine/MinerEngine.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MinerEngine/MinerEngine.cpp	Wed Apr 22 15:52:04 2020 +0000
@@ -0,0 +1,457 @@
+#include "MinerEngine.h"
+
+
+MinerEngine::MinerEngine()
+{
+
+}
+
+MinerEngine::~MinerEngine()
+{
+
+}
+
+int sprite[48][84] =   {
+    //                        *10                 *20                 *30                 *40                 *50                 *60                 *70                 *80
+/*1 */     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1 },
+/*2 */     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1 },
+/*3 */     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1 },
+/*4 */     {1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1 },
+/*5 */     {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1 },
+/*6 */     {1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*7 */     {1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*8 */     {1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*9 */     {1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*10 */    {1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1 },
+/*11 */    {1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1 },
+/*12 */    {1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 },
+/*13 */    {1,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1 },
+/*14 */    {1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1 },
+/*15 */    {1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*16 */    {1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1 },
+/*17 */    {1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1 },
+/*18 */    {1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1 },
+/*19 */    {1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1 },
+/*20 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1 },
+/*21 */    {1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1 },
+/*22 */    {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1 },
+/*23 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1 },
+/*24 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1 },
+/*25 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1 },
+/*26 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1 },
+/*27 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1 },
+/*28 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1 },
+/*29 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1 },
+/*30 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0 },
+/*31 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1 },
+/*32 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1,1 },
+/*33 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1 },
+/*34 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1 },
+/*35 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1 },
+/*36 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1 },
+/*37 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*38 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1 },
+/*39 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*40 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*41 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*42 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*43 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*44 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*45 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*46 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*47 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+/*48 */    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
+};
+
+int arrow[8][8] = {
+    {0,0,0,0,0,0,0,0},
+    {0,0,0,0,0,0,0,0},
+    {0,0,0,1,0,0,0,0},
+    {0,0,1,0,0,0,0,0},
+    {0,1,1,1,1,1,0,0},
+    {0,0,1,0,0,0,0,0},
+    {0,0,0,1,0,0,0,0},
+    {0,0,0,0,0,0,0,0},
+};
+
+void MinerEngine::init(int winch_width,int winch_height,int gold_num,int monster_speed)
+{
+    // initialise the game parameters
+    _winch_width = winch_width;
+    _winch_height = winch_height;
+    _gold_num = gold_num;
+    _monster_speed = monster_speed;
+
+    _winch.init(_winch_height,_winch_width);
+    _monster.init(_monster_speed);
+    _claw.init(_winch_width);
+    _gold.init(_gold_num);
+    
+    _s = 1;
+    _state = 0;
+}
+
+
+///////////////
+void MinerEngine::state_switch()
+{
+    while(1){
+        switch(_state) {
+                    case 0:
+                       menu(pad,lcd) ;
+                        break;
+                    case 1:
+                       instruction(pad,lcd);
+                       break;
+                    case 2:
+                       options(pad,lcd);
+                        break;
+                    case 3:
+                       game_run(pad,lcd);
+                        break;
+                    case 4:
+                        game_over(pad,lcd);
+                        break;
+                } 
+    }
+}
+
+int MinerEngine::get_select(Gamepad &pad) {
+     if ( pad.check_event(Gamepad::Y_PRESSED) == true && _s >0) {
+         _s--;
+     }else if ( pad.check_event(Gamepad::A_PRESSED) == true && _s < 2) {
+         _s++;
+     }
+    return _s;
+}
+
+void MinerEngine::menu(Gamepad &pad, N5110 &lcd) {
+  
+   while ( pad.check_event(Gamepad::START_PRESSED) == false && pad.check_event(Gamepad::JOY_PRESSED) == false) {
+      lcd.clear();
+      _s = get_select(pad); // get the selection
+      lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
+      lcd.drawRect(1,1,WIDTH-2,HEIGHT-2,FILL_TRANSPARENT);
+      lcd.printString(" Press Y or A",2,1); // print the instruction
+      lcd.printString(" Instructions",4,2);
+      lcd.printString(" Start Game",4,3);
+      lcd.printString(" Options",4,4);
+      if ( _s == 1 ) {
+          lcd.drawSprite(65,24,8,8,(int *)arrow);
+          }else if ( _s == 2) {
+            lcd.drawSprite(65,32,8,8,(int *)arrow);
+                  }else if( _s == 0) {
+                      lcd.drawSprite(65,16,8,8,(int *)arrow);
+                      }
+      lcd.refresh();
+         }
+   } 
+     if ( _s == 0 ){ // select the game
+         //select(pad,lcd);
+         _state = 1;
+         break;}
+     else if ( _s == 1){
+         _staet = 3;
+         break;}
+     else if (_s == 2){
+         _state = 2;
+         break;}
+        }              
+}
+
+void MinerEngine::options(Gamepad &pad, N5110 &lcd) {
+    while ( pad.check_event(Gamepad::START_PRESSED) == false && pad.check_event(Gamepad::JOY_PRESSED) == false) {
+      lcd.clear();
+      int _s = get_select(pad);
+      lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
+      lcd.drawRect(1,1,WIDTH-2,HEIGHT-2,FILL_TRANSPARENT);
+      lcd.printString(" Press Y or A",2,1);
+      lcd.printString(" Easy",4,2);
+      lcd.printString(" Normal",4,3);
+      lcd.printString(" Hard",4,4);
+      if ( _s == 0) {
+          lcd.drawSprite(63,15,8,8,(int *)arrow);
+          _monster_speed = 0.5; // change the speed_winch
+          }else if ( _s == 1 ) {
+              lcd.drawSprite(63,24,8,8,(int *)arrow);
+              _monster_speed = 1.0;
+              }else if ( _s == 2) {
+                  lcd.drawSprite(63,32,8,8,(int *)arrow);
+                  _monster_speed = 1.5;
+                  }
+      lcd.refresh();
+    }
+    _state = 0;
+}
+
+void MinerEngine::game_run(Gamepad &pad, N5110 &lcd){
+    int fps = 8;
+    while(1){
+        readinput(pad);
+        update(pad);
+        check_goal(pad);
+        print_scores(lcd);
+        draw(lcd);
+        lcd.refresh();
+        wait(1.0f/fps);
+        }
+    
+    
+}
+/////////////
+void MinerEngine::check_goal(Gamepad &pad)//只检查金子Y<=13
+{
+    Vector2D claw_pos = _claw.get_pos();
+    // P2 has scored
+    if (claw_pos.x + _claw_size < 0) {
+        _claw.add_nowscore();
+        _claw.init(_claw_size,_speed_claw);
+        pad.tone(1500.0,0.5);
+        pad.leds_on();
+        wait(0.5);
+        pad.leds_off();
+    }
+
+    // P1 has scored
+    if (claw_pos.x > WIDTH) {
+        _winch.add_allscore();
+        _claw.init(_claw_size,_speed_claw);
+        pad.tone(1500.0,0.5);
+        pad.leds_on();
+        wait(0.5);
+        pad.leds_off();
+    }
+}
+
+void MinerEngine::print_scores(N5110 &lcd)//显示左上角即时分
+                                        //右上最高分
+{
+    // get scores from winchs
+    int winch_score = _winch.get_score();
+    //int claw_score = _claw.get_score();
+
+    // print to LCD i
+    char buffer1[14];
+    sprintf(buffer1,"%2d",winch_score);
+    lcd.printString(buffer1,WIDTH/2 - 20,1);  // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
+    char buffer2[14];
+    sprintf(buffer2,"%2d",claw_score);
+    lcd.printString(buffer2,WIDTH/2 + 4,1);
+}
+
+void MinerEngine::read_input(Gamepad &pad)
+{
+    _d = pad.get_direction();
+    _mag = pad.get_mag();
+}
+
+void MinerEngine::draw(N5110 &lcd)
+{
+    // draw the elements in the LCD buffer
+    // pitch
+    lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
+    //horizontal line
+    lcd.drawLine(0,13,WIDTH,13,1);
+    //score
+    print_scores(lcd);
+    // winchs
+    _winch.draw(lcd);
+    _claw.draw(lcd);
+    _gold.draw(lcd);
+    _monster.draw(lcd);
+
+void MinerEngine::update(Gamepad &pad)
+{
+    check_goal(pad);
+    _winch.update(_d,_mag);
+    _monster.update();
+    _claw.update();
+    _gold.update();
+
+    check_monster_collision(pad);
+    check_gold_collision(pad);
+}
+
+void MinerEngine::check_monster_collision(Gamepad &pad)
+{
+    // read current claw attributes
+    Vector2D claw_pos = _claw.get_pos();
+    ///检查怪物和爪子X是否一样
+    
+    
+    
+    
+    Vector2D claw_velocity = _claw.get_velocity();//////////////
+
+    // check if hit top wall
+    if (claw_pos.y <= 1) {  //  1 due to 1 pixel boundary/////改/检查怪物和爪子X是否一样
+        claw_pos.y = 1;  // bounce off ceiling without going off screen
+        claw_velocity.y = -claw_velocity.y;
+        // audio feedback
+        pad.tone(750.0,0.1);
+    }
+    // check if hit bottom wall
+    else if (claw_pos.y + _claw_size >= (HEIGHT-1) ) { // bottom pixel is 47
+        // hit bottom
+        claw_pos.y = (HEIGHT-1) - _claw_size;  // stops claw going off screen
+        claw_velocity.y = -claw_velocity.y;
+        // audio feedback
+        pad.tone(750.0,0.1);
+    }
+
+    // update claw parameters
+    _claw.set_velocity(claw_velocity);
+    _claw.set_pos(claw_pos);
+    
+}
+
+void MinerEngine::check_gold_collision(Gamepad &pad)
+{
+    // read current claw attributes
+    Vector2D claw_pos = _claw.get_pos();
+    Vector2D claw_velocity = _claw.get_velocity();
+
+    // check winch first
+    Vector2D winch_pos = _winch.get_pos();
+
+    // see if claw has hit the winch by checking for overlaps
+    if (
+        (claw_pos.y >= winch_pos.y) && //top
+        (claw_pos.y <= winch_pos.y + _winch_height) && //bottom
+        (claw_pos.x >= _winch_x) && //left
+        (claw_pos.x <= _winch_x + _winch_width)  //right
+    ) {
+        // if it has, fix position and reflect x velocity
+        claw_pos.x = _winch_x + _winch_width;
+        claw_velocity.x = -claw_velocity.x;
+        // audio feedback
+        pad.tone(1000.0,0.1);
+    }
+
+    
+}
+
+
+
+/////////////////////////////////////////////////////
+void MinerEngine::welcome(Gamepad &pad, N5110 &lcd) {
+    
+   
+        lcd.drawSprite(0,0,48,84,(int *)sprite);
+        lcd.drawRect(4,31,25,9, FILL_WHITE); 
+        lcd.drawRect(4,39,31,10, FILL_WHITE); 
+        lcd.printString("GOLD",5,4);
+        lcd.printString("MINER",5,5);
+        lcd.drawLine(0,47,84,47,1); 
+        lcd.refresh();
+        
+        while ( pad.check_event(Gamepad::START_PRESSED) == false) {
+    
+        pad.tone(370,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(554,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(493,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(554,0.15); 
+        wait(0.2);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(659,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(554,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(493,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(554,0.15); 
+        wait(0.35);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);
+        pad.tone(554,0.15); 
+        wait(0.2);
+        pad.leds_on();
+        wait(0.02);
+        pad.leds_off();
+        wait(0.02);   
+     }
+       
+        lcd.clear();
+        
+        for (int i=0;i<47;i++) {
+           for(int m=0;m<47;m++) { 
+              for (int n=0;n<84;n++) {
+            sprite[m][n]= sprite[m+1][n];
+            sprite[47][n]= 0;
+                }
+                
+              }
+              lcd.drawSprite(0,0,48,84,(int *)sprite);
+            lcd.refresh();
+            wait(0.1);
+             }
+             lcd.printString("Loading....",12,0);
+             lcd.drawRect(20,12,50,10,FILL_TRANSPARENT);
+             
+             for (int i=0;i<50;i++) {
+                lcd.drawRect(20,12,i,10,FILL_BLACK); 
+                lcd.refresh();
+                wait(0.05);
+             }
+             
+             lcd.printString("Complete!",20,4);
+             lcd.refresh();
+             wait(0.8);
+             lcd.clear();
+              
+}
+          
+// check claw next
+    /*
+    Vector2D claw_pos = _claw.get_pos();
+
+    // see if claw has hit the winch by checking for overlaps
+    if (
+        (claw_pos.y >= claw_pos.y) && //top
+        (claw_pos.y <= claw_pos.y + _winch_height) && //bottom
+        (claw_pos.x + _claw_size >= _claw_x) && //left
+        (claw_pos.x + _claw_size <= _claw_x + _winch_width)  //right
+    ) {
+        // if it has, fix position and reflect x velocity
+        claw_pos.x = _claw_x - _claw_size;
+        claw_velocity.x = -claw_velocity.x;
+        // audio feedback
+        pad.tone(1000.0,0.1);
+    }
+
+    // write new attributes
+    _claw.set_velocity(claw_velocity);
+    _claw.set_pos(claw_pos);
+    */
\ No newline at end of file