ዝርዝር ሁኔታ:

አርዱዲኖ - የፒያኖ ሰቆች - 16 ደረጃዎች (ከስዕሎች ጋር)
አርዱዲኖ - የፒያኖ ሰቆች - 16 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: አርዱዲኖ - የፒያኖ ሰቆች - 16 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: አርዱዲኖ - የፒያኖ ሰቆች - 16 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: የአርዱብሎክ መተግበሪያን በመጫን ላይ 2024, ሀምሌ
Anonim
አርዱዲኖ - የፒያኖ ሰቆች
አርዱዲኖ - የፒያኖ ሰቆች

ጤና ይስጥልኝ የበይነመረብ ሰዎች ፣ ይህ በአርዲኖ uno r3 ላይ የሞባይል ጨዋታ አለመቀደሱን በግልፅ እንዴት ማድረግ እንደሚቻል ነው።

ስለዚህ ለመጀመር ፣ ሁሉም ክፍሎች እንደሚከተለው ያስፈልጋሉ! 1x Arduino Uno r3 ($ 42)

2x LCD የቁልፍ ሰሌዳ መከለያ (እያንዳንዳቸው $ 19)

5x አዝራሮች

5x 220Ω ተቃዋሚዎች

28x ሽቦዎች

ደህና ፣ አንዴ ሁሉንም ክፍሎች ካገኙ በኋላ ለመጀመር ጊዜው ነው!

ደረጃ 1 - ሽቦ

ሽቦ
ሽቦ
ሽቦ
ሽቦ
ሽቦ
ሽቦ

በስዕሉ ላይ እንደሚታየው አርዱዲኖዎን እና ጓደኞችዎን በማገናኘት ይጀምሩ ፣

በአዝራሮቹ ሀዲዶች መሬት ላይ ከ A0-4 ክፍተቶች ጋር ፣ ቁልፎቹ በትክክለኛው መንገድ መገናኘታቸውን ያረጋግጡ ፣ ወይም አርዱinoኖ ይልቁንስ በፕሬስ ላይ ብቻ ሳይሆን ቁልፎቹ ያለማቋረጥ ወደታች እንደሚያዙ ያስባሉ።

ደረጃ 2 - መግለጫ መግለጫዎች

ሁሉም ኮድ እዚህ ከባዶ ማዋቀሪያ እና ባዶነት ዑደትዎ በፊት መሄድ አለበት ፣ ይህ የሆነበት ምክንያት እነዚህ ሁሉ ተለዋዋጮች እና ነገሮች እኛ ባዘጋጃቸው በርካታ ተግባራት ውስጥ ስለሚጠቀሙ ነው።

በማስቀመጥ ይጀምሩ:

#ያካትቱ

በኮድዎ አናት ላይ ፣ ይህ አርዱዲኖ ቤተመፃሕፍቱን “LiquidCrystal.h” እና የእሱ አካል የሆኑትን ተግባራት እንዲጠቀም ይነግረዋል።

ቀጣዩ ደረጃ ይህንን ኮድ ከእኛ በታች #በማስገባት ለኛ አዝራሮች የምንጠቀምባቸውን ፒኖች መግለፅ ነው።

#ይግለጹ btnEnter A0 #ይግለጹ btn1 15 #define btn2 16 #define btn3 17 #define btn4 18

ኮዱን ለማንበብ ቀላል እንዲሆንልን ወይም አስፈላጊ ከሆነም ለመለወጥ btnEnter እና btn1 ን ወደ btn 4 እንገልፃለን። ይህ ማለት btn1 ን ስንጽፍ አርዱኢኖ ያውቃል በእውነቱ እኛ አዝራሩን 15. ማለት ወደቦችን ወደብ 15 ፣ 16 ፣ 17 እና 18 ብንጠራም እነሱ በአርዱኖ ላይ A1 A2 A3 እና A4 ተብለው ተሰይመዋል ፣ ይህ የሆነበት ምክንያት እኛ ለዲጂታል ግብዓቶች ብቻ የምንጠቀም ቢሆንም ለአናሎግ ግብዓቶች በተለይ ጥቅም ላይ የሚውሉ ወደቦች ናቸው።

ቀጥሎ እኛ ፈሳሽ ክሪስታል ማሳያዎችን የሚቆጣጠሩ ነገሮችን እንፈጥራለን። ይህንን ለማድረግ ይህንን ኮድ የእኛን መግለጫዎች ከዚህ በታች ያስቀምጡ

LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);

ይህ የሚያደርገው ለአርዲኖው ይነግረናል lcdLeft ወይም lcdRight ብለን ስንጠራው ወደ LiquidCrystal ነገር እንመልሳለን። በተያያዙ ቅንፎች ውስጥ ያሉት ቁጥሮች ተግባሮቻቸውን በምንጠቀምበት ጊዜ ዕቃውን ወደ ኤልሲዲ ለመላክ የትኛውን ወደቦች መጠቀም እንዳለበት ለአርዲኖ ይነግሩታል።

አሁን የሚቀጥለውን ትንሽ ኮድ ከእቃ መግለጫዎች በታች በማስቀመጥ ተለዋዋጮችን ማወጅ አለብን።

// እነዚህ ተለዋዋጮች እርስዎ ሊለውጧቸው የሚችሉ አማራጮች ናቸው - ከፍተኛ ቁጥሮች = ፈጣን የጨዋታ ፍጥነት intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;

// ለጨዋታ ቡሊያን bolPlay ተለዋዋጮችን ያዋቅሩ ፤ ተጫዋቹ int intScore ከሆነ/ይከታተላል ፤ // የተጫዋቹን ውጤት int intiff ውስጥ ይከታተላል ፤ // ጨዋታው ምን ችግር እንዳለበት ለመናገር ኤስቲካዊ ነገር ብቻ // ለገቢ int intEnter ተለዋዋጮችን ያዋቅሩ ፣ ተጠቃሚው የገባውን ቁልፍ int intInput ን ከተጫነ/ይከታተላል ፤ // ተጠቃሚው የትኞቹን አዝራሮች እንደሚጫነው ይከታተላል ቡሊያን bolTilePressed; // ተጫዋቹ በአጋጣሚ አንድ አዝራር 5x መጫን አለመቻሉን ያረጋግጡ እና ያጡ // ለተለዋዋጭ int intick ተለዋዋጮችን ያዋቅሩ ፣ // intDelay int intDelay ድረስ ሚሊዎችን (በአንድ ዙር) ይቆጥራል ፤ // ፕሮግራሙ እስከሚቀጥለው ተራ በሚሊ Int intGameSpeed እስኪጠብቅ ድረስ ፤ // የማረሚያ አማራጮች ቡሊያን bolSerialBoard; // መቼ እውነት በተከታታይ ማሳያ ውስጥ ሰሌዳውን ያትማል

እኛ የውሂብ ዓይነቱን እና በመቀጠል የተለዋዋጭውን ስም ፣ ለምሳሌ ፣ በመግለፅ አንድ ተለዋዋጭ እናውጃለን። int thisIsAnInteger

እንደ bolSerialBoard እና bolPlay ያሉ የቦሊያን ተለዋዋጮች ከሁለት እሴቶች አንዱን ሊኖራቸው የሚችለው እውነት ወይም ሐሰት ብቻ ነው።

እንደ intScore እና intInput ያሉ ኢንቲጀር ተለዋዋጭ (int) እንደ 1 ፣ 5 ወይም 100 ያሉ ሙሉ ቁጥሮችን እንደ እሴቶች ሊወስድ ይችላል።

እዚህ እኛ የማንጠቀምባቸው አንዳንድ ሌሎች የሚታወቁ የውሂብ ዓይነቶች ሕብረቁምፊ ናቸው ፣ እሱም የጽሑፍ ቁራጭ ፣ እና ተንሳፋፊ ፣ ይህም የአስርዮሽ ቁጥር ነው።

እዚህ እያንዳንዳቸው ተለዋዋጮች በፕሮግራሙ በተለያዩ ቦታዎች ጥቅም ላይ ይውላሉ ፣ እያንዳንዳቸው የሚያደርጉትን ማጠቃለያ እዚህ አለ

bolPlay ምናሌው መታየት ካለበት ወይም ትክክለኛው ጨዋታ እየሄደ ከሆነ ለፕሮግራሙ ይነግረዋል።

intScore ተጫዋቾቹን ሰቆች ሲመቱ ውጤቱን ይከታተላል ፣

intDiff በፕሮግራሙ ላይ በኤልሲዲው ላይ ምን ዓይነት ጽሑፍ እንደሚታተም ለፕሮግራሙ ለመንገር በዋናው ምናሌ ላይ ጥቅም ላይ ይውላል ፣

የመግቢያ ቁልፍ (በስተግራ በስተግራ) ተጭኖ ከሆነ intEnter ለፕሮግራሙ ለመንገር ያገለግላል።

intInput ለፕሮግራሙ ከሌሎቹ 4 አዝራሮች የትኛው እንደተጫነ ለመንገር ያገለግላል።

bolTilePressed ፕሮግራሙ የሚነበበው አዝራሩ ሲጫን ብቻ ሳይሆን በሚያዝበት ጊዜ ብቻ መሆኑን ለማረጋገጥ ነው።

intGameSpeed ፣ intGameSpeedEasy ፣ intGameSpeedMedium እና intGameSpeedHard በየትኛው ችግር እንደተመረጠ ጨዋታው ምን ያህል በፍጥነት ማፋጠን እንዳለበት ለመቆጣጠር ያገለግላሉ።

intTick እና intDelay ፕሮግራሙ በተጠለፈ ቁጥር ሰሌዳውን እንዳይንቀሳቀስ ለማቆም ያገለግላሉ።

bolSerialBoard ፕሮግራሙ ለሙከራ ዓላማዎች እንደ ተከታታይ ቁጥሮች ሰሌዳውን ወደ አርዱዲኖ ተከታታይ ማሳያ እንዲልክ ለማድረግ እንዲረዳዎት ያገለግላል።

በመጨረሻ ይህንን ኮድ በመጠቀም የእኛን ሰሌዳ እንደ ድርድር ለማወጅ ጊዜው አሁን ነው -

// ጨዋታ ያዋቅሩ arrayint arrGame [16] [4] = {{0, 0, 0, 0}, {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ 0, 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ {0 ፣ 0 ፣ 0 ፣ 0} ፣ 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0}};

ድርድር ለሒሳብ ሊጠራ ወይም ሊቀየር የሚችልበት ማንኛውም ነጥብ ማትሪክስ ነው።

የእርስዎ ኮድ አሁን እንደዚህ ያለ ነገር መታየት አለበት ፤

// ቤተ -መጽሐፍትን ያካትቱ#ያካትቱ

// እነዚህ ተለዋዋጮች እርስዎ ሊለወጡዋቸው የሚችሉ አማራጮች ናቸው - ከፍ ያሉ ቁጥሮች = ፈጣን የጨዋታ ፍጥነት

int intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;

// ፒኖችን ይግለጹ

#define btnEnter A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18

// ኤልሲዲ ነገሮችን ይፍጠሩ (n ፣ ~ ፣ n ፣ ~ ፣ ~ ፣ n)

LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);

// የጨዋታ ድርድር ያዘጋጁ

int arrGame [16] [4] = {{0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0}};

// ለጨዋታው ተለዋዋጮችን ያዘጋጁ

ቡሊያን bolPlay; ተጫዋቹ int intScore ከሆነ/ይከታተላል ፤ // የተጫዋቹን ውጤት int intiff ውስጥ ይከታተላል ፤ // ጨዋታው ምን ያህል አስቸጋሪ እንደሆነ ለመናገር ብቻ ኢስቲካዊ ነገር

// ለግቤት ተለዋዋጮችን ያዋቅሩ

int intEnter; ተጠቃሚው የገባውን ቁልፍ int intInput ን ከተጫነ/ይከታተላል ፤ // ተጠቃሚው የትኞቹን አዝራሮች እንደሚጫነው ይከታተላል ቡሊያን bolTilePressed; // ተጫዋቹ በአጋጣሚ አንድ አዝራር 5x መጫን አለመቻሉን ያረጋግጡ

// ለማዞሪያ ተለዋዋጮችን ያዘጋጁ

int intTick; // intDelay int intDelay ድረስ ሚሊዎችን (በአንድ ዙር) ይቆጥራል ፤ // ፕሮግራሙ እስከሚቀጥለው ተራ በሚሊ Int intGameSpeed እስኪጠብቅ ድረስ ፤

// የማረም አማራጮችን ማቃለል

ቡሊያን bolSerialBoard; // መቼ እውነት በተከታታይ ማሳያ ውስጥ ሰሌዳውን ያትማል

ደረጃ 3 - የማዋቀሪያ ተግባር

የማዋቀሪያ ምልልስ መጀመሪያ ሲጀምር በአርዱዲኖ የሚነበበው ተግባር ነው።

በማዋቀሪያ ዑደት ውስጥ የጥቂት የእኛ ተለዋዋጮች እሴቶችን ብቻ እያቀናበርን ነው ምክንያቱም እነሱን በማወጅ ጊዜ ዋጋን ከማዘጋጀት ይልቅ እኛ እዚህ እያደረግን ነው።

ይህንን ኮድ ወደ ባዶነት ቅንብርዎ በማስገባት ይጀምሩ።

bolPlay = ሐሰት; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium;

እያንዳንዱ መስመር ተለዋዋጭ ወደ እሴት ብቻ እያቀናበረ ነው።

ጨዋታው መጫወት እንዳይጀምር bolPlay ወደ ሐሰት ተዘጋጅቷል።

intScore ወደ 0 ተቀናብሯል ፣ ምክንያቱም በተፈጥሮ ውጤትዎ በ 0 ይጀምራል።

intTick ፕሮግራሙ በአሁኑ ጊዜ ምንም ነገር ስለማይቆጥር በ 0 ይጀምራል።

intDelay ወደ 1000 ተቀናብሯል ምክንያቱም ይህ ሰቆች የሚጀምሩት መጠን ነው።

intDiff ፕሮግራሙ ለጨዋታው አስቸጋሪነት ምን እንደሚጽፍ እንዲያውቅ አስማታዊ ነገር ብቻ ነው።

intGameSpeed ወደ ማንኛውም intGameSpeedMedium ተዘጋጅቷል ፣ ማለትም በመካከለኛ ችግር ላይ ተስተካክሏል ማለት ነው።

በመቀጠልም ይህንን ኮድ አሁን ካስገቡት ኮድ በታች ባለው ባዶ አሠራር ውስጥ ያስገቡት።

lcdLeft.begin (16 ፣ 2) ፤ lcdRight.begin (16 ፣ 2) ፤

Serial.begin (9600);

ይህ አርዱዲኖ በተከታታይ መቆጣጠሪያ (ከ arduino IDE በላይኛው ቀኝ ጥግ ላይ ያለውን አዝራር ጠቅ በማድረግ የሚታይ) ከኮምፒውተሩ ጋር መገናኘት እንዲጀምር ይነግረዋል።

የእርስዎ ባዶነት ማዋቀር አሁን እንደዚህ ያለ ነገር መታየት አለበት!

ባዶነት ማዋቀር () {Serial.begin (9600); // ተከታታይ ማሳያውን ያስጀምሩ // ተለዋዋጮችን ያዋቅሩ bolPlay = ሐሰት; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium; // የ lcd's lcdLeft.begin ን ይጀምሩ (16 ፣ 2) ፤ lcdRight.begin (16, 2); }

ደረጃ 4 - የሉፕ ተግባር

የሉፕ ተግባሩ የሚከናወነው በአርዱዲኖ እያንዳንዱ የአርዱዲኖ ድግግሞሽ ነው።

የሚከተለውን ኮድ ወደ ባዶ ባዶ ሉፕዎ ይቅዱ።

ባዶነት loop () {ግቤት (); // (bolPlay == እውነት) {ከሆነ (intTick> = intDelay) {// ጨዋታው ተራውን መጫወት ወይም ለማየት Serial.println («~~~~~~~) መጠበቁን መቀጠሉን ያረጋግጡ። ~~ ")/// writeSerial () ላይ የሚንቀሳቀስ ቦርዱን ለማመልከት // ህትመት ፤ // አማራጭ ከነቃ ሰሌዳውን ወደ ተከታታይ አዝራሮች ጨዋታ (ጨዋታ) ይፃፉ (); // የተጫዋች ግብዓቶችን playBoard () ይፈትሹ ፤ // ሰሌዳውን ያንቀሳቅሱ እና አዲስ ንጣፍ clearLcd () ያክሉ ፤ // drawBoard () ከመሳልዎ በፊት ኤልሲዲዎቹን ያፅዱ ፣ // ሰሌዳውን በኤልሲዲ ታችኛው ክፍል ላይ ምልክት ያድርጉ (); intTick = 0; // intTick ን ዳግም ያስጀምሩ} ሌላ {አዝራሮች ጨዋታ (); // የተጫዋች ግብዓቶችን clearLcd () ይፈትሹ ፤ // drawBoard () ከመሳልዎ በፊት ኤልሲዲዎቹን ያፅዱ ፣ // ሰሌዳውን በ lcd intTick = intTick + intGameSpeed ላይ ይሳቡት ፤ // ወደ መዥገር አክል}} ሌላ {clearLcd (); // ርዕስ () ከመሳልዎ በፊት ኤልሲዲዎቹን ያፅዱ ፣ // የማሳያ ርዕስ እና የውጤት መረጃ አዝራሮች ምናሌ (); // የተጫዋች ግብዓት clearBoard ን ያንብቡ (); // መላውን ቦርድ = 0} መዘግየት (10) ያረጋግጡ ፤ // አርዱዲኖን በአጭር ጊዜ ያዘግዩ}

bolPlay ከእውነት ጋር እኩል ከሆነ ጨዋታው እየተጫወተ ነው ማለት ነው ፣ እና ጨዋታው በሚጫወትበት ጊዜ ሁሉም ኮድ መሮጥ አለበት ፣ ግን እኛ ቦርዱ አዲስ ሰድር እንዲጨምር እና intTick ከ intDelay የበለጠ በሚሆንበት ጊዜ ወደ ታች እንዲወርድ እንፈልጋለን ፣ ያለበለዚያ ተጠቃሚው ሰቅ ለመምታት እና intTick በፍጥነት እንዲጨምር አንድ ቁልፍ እንዲጫን መፍቀድ እንፈልጋለን።

አብዛኛው ይህ ኮድ ገና የምንሠራቸውን ተግባራት ይጠቀማል ፣ እና በሚቀጥለው ደረጃዎች እናደርጋቸዋለን። የእነዚህ ተግባራት ዓላማ እንደሚከተለው ነው።

ግቤት ተጠቃሚው የትኞቹን አዝራሮች እንደተጫነ ያነባል።

አዝራሮች ጨዋታ በምናሌው ውስጥ ሳይሆን በጨዋታው ውስጥ ቁልፎቹ የሚያደርጉትን ይቆጣጠራል

playBoard በቦርዱ ላይ አዲስ ሰድር ያክላል ፣ ከዚያ በቦርዱ ውስጥ ያሉትን ነገሮች ሁሉ ወደ አንድ ቦታ ያንቀሳቅሳል

መናፍስት ከሸክላዎቹ በስተጀርባ እንዳይቀሩ ለማረጋገጥ ኤልሲዲዎቹን ያጸዳል

drawBoard በ arrGame ውስጥ ያልፋል እና ወደ ኤልሲዲዎች ያትመዋል

ጨዋታው በጨዋታ ውስጥ በማይሆንበት ጊዜ clearBoard ሙሉውን የ arrGame ን ያጸዳል

bottomCheck ለተሳነው ሁኔታ የ arrGame ን ታች ይፈትሻል

ርዕስ የጨዋታውን ርዕስ ያሳያል እና በምናሌው ላይ ሲገኝ መረጃን ያስቆጥራል

አዝራሮች ምናሌ በምናሌው ውስጥ ሲሆኑ የተጠቃሚው ግብዓቶች የሚያደርጉትን ይቆጣጠራል።

ምንም እንኳን እዚህ ላይ ባይጠራም በቼክ እና በአዝራሮች የጨዋታ ተግባራት ውስጥ ተብሎ ቢጠራም gameOver ሌላ ተግባር ነው።

ደረጃ 5 የ ClearLCD ተግባር

ተግባር ለመፍጠር እኛ ይህንን ወደ ኮዱ በማከል እንጀምራለን

ባዶነት ተግባር ስም () {

}

እሱ እስካሁን እስካልተገኘ ድረስ “የተግባር ስም” ማንኛውም ሊሆን ይችላል።

ይህንን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ

ባዶ clearLcd () {ለ (int i = 0; i <= 15; i ++) {ለ (int ii = 0; ii <= 1; ii ++) {lcdLeft.setCursor (i, ii); lcdLeft.write (""); lcdRight.setCursor (i, ii); lcdRight.write (""); }}}

በኤልሲዲዎች ላይ እያንዳንዱን ነጥብ ለማለፍ እና ቦታ ለመፃፍ 2 የተቆጠሩ ቀለበቶችን በመጠቀም ይህ በመላው ድርድር ውስጥ ያልፋል።

ኤልሲዲው ወደ ምንም ሳይቀየር ቀደም ሲል የተፃፈውን ሁሉ ይጠብቃል

ደረጃ 6 የ DrawBoard ተግባር

ይህንን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ

ባዶ ባዶ DrawBoard () {ለ (int i = 1; i <= 15; i ++) {// በግራ በኩል ኤልሲዲ ላይ 1 እና 2 ን ይሳሉ // ሰድር = 0 ምንም ካልፃፈ ፣ = 1 “#” ፣ = 2 ይፃፉ "@" lcdLeft.setCursor (i, 1) ይፃፉ; // ወደ መጀመሪያው አምድ (ከግራ ወደ ግራ) ከተዋቀረ (arrGame [0] == 1) {lcdLeft.write ("#") ፤} ከሆነ (arrGame [0] == 2) {lcdLeft. ጻፍ ("@");} lcdLeft.setCursor (i, 0); // ወደ ሁለተኛው ዓምድ (ግራ ግራ) ከተዋቀረ (አርሜሜ [1] == 1) {lcdLeft.write ("#") ፤} ከሆነ (arrGame [1] == 2) {lcdLeft. ጻፍ ("@");} lcdRight.setCursor (i, 1); // ወደ ሦስተኛው ዓምድ (መሃል ቀኝ) ከተዋቀረ (arrGame [2] == 1) {lcdRight.write ("#") ፤} ከሆነ (arrGame [2] == 2) {lcdRight. ጻፍ ("@");} lcdRight.setCursor (i, 0); // ወደ አራተኛው መጋጠሚያ (በስተቀኝ በስተቀኝ) ከሆነ (arrGame [3] == 1) {lcdRight.write ("#") ፤} ከሆነ (arrGame [3] == 2) {lcdRight. ጻፍ ("@");}}}

ይህ በእያንዳንዱ የቦርዱ ረድፍ ውስጥ ለማለፍ አንድ ሉፕ ይጠቀማል ፣ ከዚያ በመደዳ ውስጥ ያለ ማንኛውም አምድ ከ 1 ወይም 2 ጋር እኩል መሆኑን ይፈትሻል ፣ በዚህ መሠረት ኤልሲዲ ወይም ሃሽታግ ላይ ያትማል ፣ አንድ ሰቅ ገና ይምቱ ፣ ወይም ለተመታ ሰቅ አንድ @

ደረጃ 7 - የ PlayBoard ተግባር

ይህንን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ።

ባዶ playBoard () {ለ (int i = 0; i <= 3; i ++) {arrGame [0] = 0;} // የላይኛውን ረድፍ arrGame [0] [የዘፈቀደ (0, 4)] = = 1; // ለ (int i = 15; i> = 1; i-) {// ከቦርዱ ግርጌ ወደ ላይ እየሰራ (int ii = 0; ii <= 3; ii ++) {// ለእያንዳንዱ collum arrGame [ii] = arrGame [i - 1] [ii]; }}}

ይህ ኮድ የሚጀምረው መላውን የላይኛው ረድፍ ወደ 0 ፣ ወይም ምንም ሰድር በማፅዳት ነው ፣ እና ከዚያ አንድ የዘፈቀደ ሰድር 1 እንዲሆን ፣ እና ሰድርን እንዳይደበዝዝ ያደርገዋል።

ከዚያ ከ 15 ወደ 1 በተቆጠረ ዑደት በኩል ያልፋል ፣ ረድፉ ከእሱ ጋር ካለው ረድፍ ጋር እኩል እንዲሆን ረድፉን በማቀናበር ሰሌዳው ወደ ኤልሲዲው እንዲወርድ ያደርገዋል።

ደረጃ 8 - የ ClearBoard ተግባር

ይህንን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ።

ባዶ ባዶ clearBoard () {// ዳግም ምልክት ማድረጊያ እና የመዘግየት እሴቶች intTick = 0; intDelay = 1000; // በቦርዱ ውስጥ ያልፉ እና ሁሉንም ለ 0 ያዘጋጁ (int i = 0; i <= 15; i ++) {ለ (int ii = 0; ii <= 3; ii ++) {arrGame [ii] = 0; }}}

በድርድሩ ውስጥ ለማለፍ የተቆጠሩ ቀለበቶችን በመጠቀም ጨዋታው በአጠቃላይ arrGame ወደ 0 ፣ ወይም ምንም ሰቆች አለመኖሩን ለማረጋገጥ ይህ ኮድ አይሠራም።

ኮዱ የ intDelay እና intTick እሴቶችን እንደገና ያስጀምራል።

ደረጃ 9 የርዕስ ተግባር

የሚከተለውን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ

ባዶነት ርዕስ () {// ርዕስ በኤልሲዲ ላይ ይፃፉ እና ነጥብ lcdRight.setCursor (0 ፣ 0); lcdRight.write ("የፒያኖ ሰቆች"); lcdRight.setCursor (0, 1); lcdRight.write ("ውጤት:"); // ውጤቱን ወደ ሕብረቁምፊ ቻር strScore ይለውጡ [3]; sprintf (strScore ፣ “%d” ፣ intScore); // የማሳያ ነጥብ በ LCD lcdRight.write (strScore) ላይ ፤ // አሰራጭ lcdRight.setCursor (10 ፣ 1) ያክሉ ፤ ከሆነ (intDiff == 0) {lcdRight.write (“ቀላል”); } ከሆነ (intDiff == 1) {lcdRight.write ("መካከለኛ"); } ከሆነ (intDiff == 2) {lcdRight.write (“ከባድ”); } // ትንሽ መመሪያን ይጫኑ lcdLeft.setCursor (0, 0); lcdLeft.write ("Enter ን ይጫኑ"); lcdLeft.setCursor (0, 1); lcdLeft.write ("ለመጀመር!"); }

ይህ ኮድ የጨዋታውን ርዕስ እና ውጤቱን በኤልሲዲዎች ላይ ይጽፋል ፣ ይህንን የሚያደርገው LCD.setCursor ን በመጠቀም የት መተየብ እንደሚጀምር ለኤል.ሲ.

አዲስ ተለዋዋጭ እዚህም ተፈጥሯል ፣ strScore ፣ የ sprintf ተግባሩን በመጠቀም intScore ን ወደ ሕብረቁምፊ ወይም ወደ ቻር የውሂብ ዓይነት ለመለወጥ ጥቅም ላይ ይውላል።

intDiff እዚህም ጥቅም ላይ ውሏል ፣ በእሴቶቹ ላይ በመመርኮዝ የተለያዩ የችግር አማራጮችን ያትማል።

ደረጃ 10 የ “ButtonsMenu” ተግባር

የሚከተለውን ኮድ በፕሮግራምዎ ውስጥ ያስገቡ

ባዶ አዝራሮች ምናሌ () {// ግቤት ሲጫን ጨዋታውን ይጀምሩ እና የውጤት ዋጋን ዳግም ያስጀምሩ (intEnter == 1) {bolPlay = true; intScore = 0; playBoard (); drawBoard (); } // አዝራር 3 ሲጫን ቦርዱን በተከታታይ የማተም የማረም አማራጭን ያብሩ (intInput == 3) {ከሆነ (bolSerialBoard == false) {Serial.println (“Serial Board Active”) ፤ bolSerialBoard = እውነት; } ሌላ {Serial.println ("ተከታታይ ቦርድ ተሰናክሏል"); bolSerialBoard = ሐሰት; }} // የጨዋታውን ፍጥነት ወደ ቀላል ችግር ያዘጋጁ (intInput == 0) {Serial.print (“ጨዋታው ወደ ቀላል (”) ፣ Serial.print (intGameSpeedEasy) ፤ Serial.println ("ms acceleration)") ከሆነ ፤ intDiff = 0; intGameSpeed = intGameSpeedEasy; } // የጨዋታውን ፍጥነት ወደ መካከለኛ ችግር ያዘጋጁ (intInput == 1) {Serial.print ("ጨዋታው ወደ መካከለኛ (") ፤ Serial.print (intGameSpeedMedium) ፤ Serial.println ("ms acceleration)") ፤ intDiff = 1; intGameSpeed = intGameSpeedMedium; } // የጨዋታውን ፍጥነት ወደ ከባድ ችግር ያዘጋጁ (intInput == 2) {Serial.print (“ጨዋታው ወደ ከባድ (”) ፣ Serial.print (intGameSpeedHard) ፤ Serial.println (“ms acceleration)”) ከሆነ ፤ intDiff = 2; intGameSpeed = intGameSpeedHard; }}

ይህ ኮድ የሚሄደው ቦልፓይ በባዶ ሉፕ ውስጥ ከሐሰት ጋር ሲወዳደር ብቻ ነው

intEnter ወደ 1 ከተዋቀረ የመግቢያ አዝራሩ ተገፍቷል ማለት ነው ፣ እሱ እየተጫነ ከሆነ ፕሮግራሙ bolPlay ን ወደ እውነት ያዘጋጃል እና ጨዋታው ይጀምራል።

ከዚያ ፕሮግራሙ intInput ምን ያህል እንደሆነ ያነባል። ከ 0 ጋር እኩል ከሆነ ከግራ ያለው የመጀመሪያው አዝራር እየተጫነ ነው ፣ ወደ ቀኝ ወደ ላይ በመውጣት እስከ 3. IntInput ከ 4 ጋር እኩል ከሆነ ምንም ቁልፍ አልተጫነም።

አዝራሮች 0-2 ከተጫኑ ጨዋታው ችግሩን ይለውጣል ፣ እንዲሁም የጨዋታውን ፍጥነት ዋጋ ያስተካክላል ፣ ማለትም በፍጥነት ያፋጥናል።

አዝራር 3 ከተጫነ ጨዋታው በፕሮግራሙ ውስጥ ጉዳዮችን ለማግኘት ለመርዳት ጠቅላላው ሰሌዳ በተከታታይ ማሳያ ውስጥ የታተመበትን የማረም ሁነታን ያነቃቃል ወይም ያቦዝናል።

ደረጃ 11: የአዝራሮች ጨዋታ ተግባር

የሚከተለውን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ

ባዶ አዝራሮች ጨዋታ () {ከሆነ (intInput! = 4) {// አንድ አዝራር ከተጫነ (bolTilePressed == ሐሰት) {// bolTilePressed አንድ አዝራርን ለመፈተሽ የሐሰት ቀስቅሴ እርምጃ ከሆነ ብቻ bolTilePressed = true; // ከዚያ በድንገት እንደገና intLowestTile = 0 አለመነሳቱን ለማረጋገጥ bolTilePressed ወደ እውነት ያዘጋጁ። // ዝቅተኛው ሰድር int intCheckedTile = 15 ጋር ወደ ሰድር እንዲዘጋጅ // (intLowestTile == 0) {// ወደማንኛውም ነገር እስካልተዋቀረ ድረስ (int i = 0; i 100) {// int እስከሆነ ድረስ የትኞቹ ሰቆች እንደተመረመሩ ለመከታተል። መዘግየት ከ 100 intDelay = intDelay - 20 በታች አይደለም። // ዋጋን ከእሱ ይውሰዱ}} ሌላ {Serial.println (“የተሳሳተ አዝራር ተጭኗል”) ፤ ጨዋታው አለቀ(); // አለበለዚያ ጨዋታ ያበቃል}}}}}

ኮዱ የሚሄደው ቦልፕሌይ ባዶ በሆነ ሉፕ ውስጥ ከእውነት ጋር እኩል በሚሆንበት ጊዜ ብቻ ነው።

ልክ እንደ አዝራሮች ምናሌ በ ‹InInput› እሴት ላይ በመመርኮዝ ተጫዋቹ ሰቅ እንደመታ ወይም እንዳመለጠ ይፈትሻል።

ባልተሸፈነ ሰድር የትኛው ረድፍ ዝቅተኛው እንደሆነ ለመፈለግ የትንሽ ጊዜን በመጠቀም በአርኤም ጨዋታን ከታች ወደ ላይ በማለፍ ይህንን ያደርጋል። ከዚያ ከተገፋው አዝራር ጋር የሚዛመድ በዚያ ረድፍ ውስጥ ያለው ቦታ ያልታሸገ ሰድር መሆኑን ወይም አለመሆኑን ይፈትሻል ፣ ካልታጠበ ከ 1 ይልቅ 2 እኩል ያደርገዋል ፣ ማለትም እንደ @ይታያል ማለት ነው ፣ አለበለዚያ ጨዋታውን ያነቃቃል እኛ ገና የምንፈጥረው ተግባር።

አንድ ቁልፍ ሲጫን እና ሐሰት በሚጫንበት ጊዜ ይህ ተግባር የ bolTilePressed ተለዋዋጭን ወደ እውነት በማዋቀር ይጠቀማል። ፕሮግራሙ እሱን ሲይዙት ብዙ ጊዜ ተጭነዋል ብለው ስለሚያስቡ ተጠቃሚው ጨዋታውን በአጋጣሚ እንዳይፈታ ለማረጋገጥ ነው።

ደረጃ 12 - የ GameOver ተግባር

የሚከተለውን ኮድ ወደ ፕሮግራምዎ ይቅዱ

ባዶነት gameOver () {Serial.println («ጨዋታ አብቅቷል!»); Serial.print ("የእርስዎ ውጤት ነበር:"); Serial.println (intScore); Serial.print ("የእርስዎ ፍጥነት ነበር:"); Serial.println (intDelay); bolPlay = ሐሰት; }

ይህ በቼክ ታች ወይም በአዝራሮች ጨዋታ ተግባራት ተቀስቅሷል እና bolPlay ን ሐሰተኛ በማድረግ የጨዋታውን መጨረሻ ያነቃቃል።

እንዲሁም ለተጠቃሚው ውጤት በተከታታይ ማሳያ ውስጥ መልእክት ያትማል እና የፍጥነት ሰቆች በሚሊሰከንዶች ውስጥ ተጨምረዋል።

ደረጃ 13 - የግቤት ተግባር

የሚከተለውን ኮድ ወደ ፕሮግራምዎ ይቅዱ።

ባዶ ግብዓት () {intEnter = digitalRead (btnEnter); // አንብብ አስገባ // አንብብ/ከሌሎቹ ግብዓቶች ውስጥ የትኛውን አንብብ ፣ ወይም ማንም ወደ 1;} ሌላ {ከሆነ (digitalRead (btn3) == HIGH) {intInput = 2;} ሌላ {if (digitalRead (btn4) == HIGH) {intInput = 3;} ሌላ {intInput = 4; }}}} // ተከታታይ ግቤቶቹ (intEnter == 1) {Serial.println («ተጭኖ ይግቡ!»)) ፤} ከሆነ (intInput! = 4) {Serial.print ("Button Press:"); Serial.println (intInput); } ሌላ {// ምንም አዝራር ካልተጫነ bolTilePressed bolTilePressed = false; }}

ይህ ኮድ በጨዋታዎች እና በአዝራሮች ምናሌ ተግባራት ላይ ጥቅም ላይ ይውላል። በተጫነው አዝራሮች ላይ በመመስረት ተጠቃሚው የገባውን እሴት ያዘጋጃል ፣ ወይም ምንም ቁልፍ ካልተጫነ intInput ን ወደ 4 እኩል ያዘጋጃል።

ምንም አዝራር ካልተጫነ ይህ ለቦሌዎች የጨዋታ ተግባር bolTilePressed ዳግም የሚጀመርበት ነው።

እንዲሁም በየትኛው አዝራር ላይ ተጭኖ ለተከታታይ ማሳያ መልእክት ያትማል።

ደረጃ 14 የ BottomCheck ተግባር

የሚከተለውን ኮድ ወደ ፕሮግራምዎ ይቅዱ።

ባዶ ባዶCheck () {ለ (int i = 0; i <= 3; i ++) {// ለ 4 አምዶች (arrGame [15] == 1) {// አንድ ሰድር ከታች Serial ላይ ከሆነ.println ("ከታች ሰድር"); arrGame [15] = 2; drawBoard (); መዘግየት (400); arrGame [15] = 1; drawBoard (); መዘግየት (400); arrGame [15] = 2; drawBoard (); መዘግየት (400); arrGame [15] = 1; drawBoard (); መዘግየት (400); ጨዋታው አለቀ(); }}}

loop በመጠቀም ይህ ኮድ ለማንኛውም ያልተጋለጡ ንጣፎች (ከ 1 ጋር እኩል የሆኑ ሰቆች) የአርጋሜውን የታችኛው ረድፍ ይፈትሻል ፣ በማያ ገጹ ታችኛው ክፍል ላይ ያልተጣራ ሰድር ካለ ሰድሩን ያበራል እና ከዚያ ጨዋታውን በተግባሩ ላይ ያስነሳል።

ደረጃ 15 የ WriteSerial ተግባር

የሚከተለውን ኮድ በፕሮግራምዎ ውስጥ ይቅዱ

ባዶ ባዶ ጽሑፍ () (ከሆነ (bolSerialBoard == እውነት) {ለ (int i = 0; i <= 15; i ++) {ለ (int ii = 0; ii <= 3; ii ++) {Serial.print (arrGame [ii]); Serial.print (","); } Serial.println (""); }}}

ይህ በአዝራሮች ምናሌ ተግባር ውስጥ ሊነቃ በሚችል የማረም አማራጭ የተከተለው ተግባር ነው። BolSerialBoard በዚያ ተግባር ውስጥ ወደ እውነት ከተዋቀረ በአርሜጋሜ ውስጥ ያልፋል እና ድርድርን በመጠቀም ለሙከራ ዓላማዎች መላውን ሰሌዳ ወደ ተከታታይ ማሳያ ያትማል።

ደረጃ 16: ማጠናቀቅ

ማጠናቀቅ!
ማጠናቀቅ!

ሁሉም የእርስዎ ኮድ የተሟላ እና እንደዚህ ያለ ነገር ሊመስል አይገባም!

/ * * ስም - የፒያኖ ሰቆች; አርዱinoኖ * በ - ዶሜኒክ ማሩሊ * ቀን - 11/ *

/ ቤተ -ፍርግሞችን ያካትቱ

#ያካትቱ

// እነዚህ ተለዋዋጮች እርስዎ ሊለወጡዋቸው የሚችሉ አማራጮች ናቸው - ከፍ ያሉ ቁጥሮች = ፈጣን የጨዋታ ፍጥነት

int intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;

// ፒኖችን ይግለጹ

#define btnEnter A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18

// ኤልሲዲ ነገሮችን ይፍጠሩ (n ፣ ~ ፣ n ፣ ~ ፣ ~ ፣ n)

LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);

// የጨዋታ ድርድር ያዘጋጁ

int arrGame [16] [4] = {{0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0} ፣ {0, 0, 0, 0}};

// ለጨዋታው ተለዋዋጮችን ያዘጋጁ

ቡሊያን bolPlay; ተጫዋቹ int intScore ከሆነ/ይከታተላል ፤ // የተጫዋቹን ውጤት int intiff ውስጥ ይከታተላል ፤ // ጨዋታው ምን ያህል አስቸጋሪ እንደሆነ ለመናገር ብቻ ኢስቲካዊ ነገር

// ለግቤት ተለዋዋጮችን ያዋቅሩ

int intEnter; ተጠቃሚው የገባውን ቁልፍ int intInput ን ከተጫነ/ይከታተላል ፤ // ተጠቃሚው የትኞቹን አዝራሮች እንደሚጫነው ይከታተላል ቡሊያን bolTilePressed; // ተጫዋቹ በአጋጣሚ አንድ አዝራር 5x መጫን አለመቻሉን ያረጋግጡ

// ለማዞሪያ ተለዋዋጮችን ያዘጋጁ

int intTick; // intDelay int intDelay ድረስ ሚሊዎችን (በአንድ ዙር) ይቆጥራል ፤ // ፕሮግራሙ እስከሚቀጥለው ተራ በሚሊ Int intGameSpeed እስኪጠብቅ ድረስ ፤

// የማረም አማራጮችን ማቃለል

ቡሊያን bolSerialBoard; // መቼ እውነት በተከታታይ ማሳያ ውስጥ ሰሌዳውን ያትማል

// አንድ ጊዜ የሚካሄድ ቅንብር

ባዶነት ማዋቀር () {Serial.begin (9600); // ተከታታይ ማሳያውን ያስጀምሩ // ተለዋዋጮችን ያዋቅሩ bolPlay = ሐሰት; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium; // የ lcd's lcdLeft.begin ን ይጀምሩ (16 ፣ 2) ፤ lcdRight.begin (16, 2); }

// በየ 10 ሚሊሰከንዶች የሚሄደው loop

ባዶነት loop () {ግቤት (); // (bolPlay == እውነት) {ከሆነ (intTick> = intDelay) {// ጨዋታው ተራውን መጫወት ወይም ለማየት Serial.println («~~~~~~~) መጠበቁን መቀጠሉን ያረጋግጡ። ~~ ")/// writeSerial () ላይ የሚንቀሳቀስ ቦርዱን ለማመልከት // ህትመት ፤ // አማራጭ ከነቃ ሰሌዳውን ወደ ተከታታይ አዝራሮች ጨዋታ (ጨዋታ) ይፃፉ (); // የተጫዋች ግብዓቶችን playBoard () ይፈትሹ ፤ // ሰሌዳውን ያንቀሳቅሱ እና አዲስ ንጣፍ clearLcd () ያክሉ ፤ // drawBoard () ከመሳልዎ በፊት ኤልሲዲዎቹን ያፅዱ ፣ // ሰሌዳውን በኤልሲዲ ታችኛው ክፍል ላይ ምልክት ያድርጉ (); intTick = 0; // intTick ን ዳግም ያስጀምሩ} ሌላ {አዝራሮች ጨዋታ (); // የተጫዋች ግብዓቶችን clearLcd () ይፈትሹ ፤ // drawBoard () ከመሳልዎ በፊት ኤልሲዲዎቹን ያፅዱ ፣ // ሰሌዳውን በ lcd intTick = intTick + intGameSpeed ላይ ይሳቡት ፤ // ወደ መዥገር አክል}} ሌላ {clearLcd (); // ርዕስ () ከመሳልዎ በፊት ኤልሲዲዎቹን ያፅዱ ፣ // የማሳያ ርዕስ እና የውጤት መረጃ አዝራሮች ምናሌ (); // የተጫዋች ግብዓት clearBoard ን ያንብቡ (); // መላውን ቦርድ = 0} መዘግየት (10) ያረጋግጡ ፤ // አርዱዲኖን በአጭር ጊዜ ያዘግዩ}

// ኤልሲዲውን ያጸዳል ፣ ስለዚህ ማንኛውም ያልገቡ ሕዋሳት እዚያ አይቀሩም

ባዶ clearLcd () {ለ (int i = 0; i <= 15; i ++) {ለ (int ii = 0; ii <= 1; ii ++) {lcdLeft.setCursor (i, ii); lcdLeft.write (""); lcdRight.setCursor (i, ii); lcdRight.write (""); }}}

// ሰሌዳውን ወደ ኤልሲዲው ይስባል

ባዶ ባዶ DrawBoard () {ለ (int i = 1; i <= 15; i ++) {// በግራ በኩል ኤልሲዲ ላይ 1 እና 2 ን ይሳሉ // ሰድር = 0 ምንም ካልፃፈ ፣ = 1 “#” ፣ = 2 ይፃፉ "@" lcdLeft.setCursor (i, 1) ይፃፉ; // ወደ መጀመሪያው አምድ (ከግራ ወደ ግራ) ከተዋቀረ (arrGame [0] == 1) {lcdLeft.write ("#") ፤} ከሆነ (arrGame [0] == 2) {lcdLeft. ጻፍ ("@");} lcdLeft.setCursor (i, 0); // ወደ ሁለተኛው ዓምድ (ግራ ግራ) ከተዋቀረ (አርሜሜ [1] == 1) {lcdLeft.write ("#") ፤} ከሆነ (arrGame [1] == 2) {lcdLeft. ጻፍ ("@");} lcdRight.setCursor (i, 1); // ወደ ሦስተኛው ዓምድ (መሃል ቀኝ) ከተዋቀረ (arrGame [2] == 1) {lcdRight.write ("#") ፤} ከሆነ (arrGame [2] == 2) {lcdRight. ጻፍ ("@");} lcdRight.setCursor (i, 0); // ወደ አራተኛው መጋጠሚያ (በስተቀኝ በስተቀኝ) ከሆነ (arrGame [3] == 1) {lcdRight.write ("#") ፤} ከሆነ (arrGame [3] == 2) {lcdRight. ጻፍ ("@");}}}

// ቦርዱን ወደ ታች ያንቀሳቅሳል እና የዘፈቀደ እሴት ሰድር እንዲሆን ያስቀምጣል

ባዶ playBoard () {ለ (int i = 0; i <= 3; i ++) {arrGame [0] = 0;} // የላይኛውን ረድፍ arrGame [0] [የዘፈቀደ (0, 4)] = = 1; // ለ (int i = 15; i> = 1; i-) {// ከቦርዱ ግርጌ ወደ ላይ እየሰራ (int ii = 0; ii <= 3; ii ++) {// ለእያንዳንዱ collum arrGame [ii] = arrGame [i - 1] [ii]; }}}

// መላውን ሰሌዳ ወደ 0 ያዘጋጃል እና ተለዋዋጮችን ወደ ቅድመ ስም ዳግም ያስጀምራል

ባዶ ባዶ clearBoard () {// ዳግም ምልክት ማድረጊያ እና የመዘግየት እሴቶች intTick = 0; intDelay = 1000; // በቦርዱ ውስጥ ያልፉ እና ሁሉንም ለ 0 ያዘጋጁ (int i = 0; i <= 15; i ++) {ለ (int ii = 0; ii <= 3; ii ++) {arrGame [ii] = 0; }}}

// በ LCD ላይ ዋናውን ምናሌ ያሳያል

ባዶነት ርዕስ () {// ርዕስ በኤልሲዲ ላይ ይፃፉ እና ነጥብ lcdRight.setCursor (0 ፣ 0); lcdRight.write ("የፒያኖ ሰቆች"); lcdRight.setCursor (0, 1); lcdRight.write ("ውጤት:"); // ውጤቱን ወደ ሕብረቁምፊ ቻር strScore ይለውጡ [3]; sprintf (strScore ፣ “%d” ፣ intScore); // የማሳያ ነጥብ በ LCD lcdRight.write (strScore) ላይ ፤ // አሰራጭ lcdRight.setCursor (10 ፣ 1) ያክሉ ፤ ከሆነ (intDiff == 0) {lcdRight.write (“ቀላል”); } ከሆነ (intDiff == 1) {lcdRight.write ("መካከለኛ"); } ከሆነ (intDiff == 2) {lcdRight.write (“ከባድ”); } // ትንሽ መመሪያን ይጫኑ lcdLeft.setCursor (0, 0); lcdLeft.write ("Enter ን ይጫኑ"); lcdLeft.setCursor (0, 1); lcdLeft.write ("ለመጀመር!"); }

// ከጨዋታ ውጭ በሚሆኑበት ጊዜ ቁልፎቹን እና ምን ማድረግ እንዳለባቸው ይፈትሻል

ባዶ አዝራሮች ምናሌ () {// ግቤት ሲጫን ጨዋታውን ይጀምሩ እና የውጤት ዋጋን ዳግም ያስጀምሩ (intEnter == 1) {bolPlay = true; intScore = 0; playBoard (); drawBoard (); } // አዝራር 3 ሲጫን ቦርዱን በተከታታይ የማተም የማረም አማራጭን ያብሩ (intInput == 3) {ከሆነ (bolSerialBoard == false) {Serial.println (“Serial Board Active”) ፤ bolSerialBoard = እውነት; } ሌላ {Serial.println ("ተከታታይ ቦርድ ተሰናክሏል"); bolSerialBoard = ሐሰት; }} // የጨዋታውን ፍጥነት ወደ ቀላል ችግር ያዘጋጁ (intInput == 0) {Serial.print (“ጨዋታው ወደ ቀላል (”) ፣ Serial.print (intGameSpeedEasy) ፤ Serial.println ("ms acceleration)") ከሆነ ፤ intDiff = 0; intGameSpeed = intGameSpeedEasy; } // የጨዋታውን ፍጥነት ወደ መካከለኛ ችግር ያዘጋጁ (intInput == 1) {Serial.print ("ጨዋታው ወደ መካከለኛ (") ፤ Serial.print (intGameSpeedMedium) ፤ Serial.println ("ms acceleration)") ፤ intDiff = 1; intGameSpeed = intGameSpeedMedium; } // የጨዋታውን ፍጥነት ወደ ከባድ ችግር ያዘጋጁ (intInput == 2) {Serial.print (“ጨዋታው ወደ ከባድ (”) ፣ Serial.print (intGameSpeedHard) ፤ Serial.println (“ms acceleration)”) ከሆነ ፤ intDiff = 2; intGameSpeed = intGameSpeedHard; }}

// በጨዋታ ውስጥ እያሉ ቁልፎቹን እና ምን ማድረግ እንዳለባቸው ይፈትሻል

ባዶ አዝራሮች ጨዋታ () {ከሆነ (intInput! = 4) {// አንድ አዝራር ከተጫነ (bolTilePressed == ሐሰት) {// bolTilePressed አንድ አዝራርን ለመፈተሽ የሐሰት ቀስቅሴ እርምጃ ከሆነ ብቻ bolTilePressed = true; // ከዚያ በድንገት እንደገና intLowestTile = 0 አለመነሳቱን ለማረጋገጥ bolTilePressed ወደ እውነት ያዘጋጁ። // ዝቅተኛው ሰድር int intCheckedTile = 15 ጋር ወደ ሰድር እንዲዘጋጅ // (intLowestTile == 0) {// ወደማንኛውም ነገር እስካልተዋቀረ ድረስ (int i = 0; i 100) {// int እስከሆነ ድረስ የትኞቹ ሰቆች እንደተመረመሩ ለመከታተል። መዘግየት ከ 100 intDelay = intDelay - 20 በታች አይደለም። // ዋጋን ከእሱ ይውሰዱ}} ሌላ {Serial.println (“የተሳሳተ አዝራር ተጭኗል”) ፤ ጨዋታው አለቀ(); // አለበለዚያ ጨዋታ ያበቃል}}}}}

ባዶነት gameOver () {

Serial.println ("ጨዋታው አልቋል!"); Serial.print ("የእርስዎ ነጥብ ነበር:"); Serial.println (intScore); Serial.print ("የእርስዎ ፍጥነት ነበር:"); Serial.println (intDelay); bolPlay = ሐሰት; }

// ለተጫዋች ግብዓት ይፈትሻል

ባዶ ግብዓት () {intEnter = digitalRead (btnEnter); // አንብብ አስገባ // አንብብ/ከሌሎቹ ግብዓቶች ውስጥ የትኛውን አንብብ ፣ ወይም ማንም ወደ 1;} ሌላ {ከሆነ (digitalRead (btn3) == HIGH) {intInput = 2;} ሌላ {if (digitalRead (btn4) == HIGH) {intInput = 3;} ሌላ {intInput = 4; }}}} // ተከታታይ ግቤቶቹ (intEnter == 1) {Serial.println («ተጭኖ ይግቡ!»)) ፤} ከሆነ (intInput! = 4) {Serial.print ("Button Press:"); Serial.println (intInput); } ሌላ {// ምንም አዝራር ካልተጫነ bolTilePressed bolTilePressed = false; }}

// አለመሳካት የቦርዱን ታች ይፈትሻል

ባዶ ባዶCheck () {ለ (int i = 0; i <= 3; i ++) {// ለ 4 አምዶች (arrGame [15] == 1) {// አንድ ሰድር ከታች Serial ላይ ከሆነ.println ("ከታች ሰድር"); arrGame [15] = 2; drawBoard (); መዘግየት (400); arrGame [15] = 1; drawBoard (); መዘግየት (400); arrGame [15] = 2; drawBoard (); መዘግየት (400); arrGame [15] = 1; drawBoard (); መዘግየት (400); ጨዋታው አለቀ(); }}}

bolSerialBoard እውነት ከሆነ/ቦርዱን ወደ ተከታታይ ሞኒተር ያትማል

ባዶ ባዶ ጽሑፍ () (ከሆነ (bolSerialBoard == እውነት) {ለ (int i = 0; i <= 15; i ++) {ለ (int ii = 0; ii <= 3; ii ++) {Serial.print (arrGame [ii]); Serial.print (","); } Serial.println (""); }}}

አንዴ ሁሉም ኮድ ከገባ በኋላ ወደ አርዱዲኖ ይስቀሉ እና ይደሰቱ!

የሚመከር: