» อิเล็กทรอนิกส์ » Arduino »การสร้าง Tetris บน Arduino

ทำ Tetris บน Arduino

อาศิรพจน์ ชาวเว็บไซต์ของเรา!
วันนี้เราจะศึกษาด้านในของเกม Tetris ที่เขียนภายใต้แพลตฟอร์ม Arduino และเมทริกซ์ LED

ผู้เขียนผลิตภัณฑ์โฮมเมดนี้คือ AlexGyver ผู้เขียนช่อง YouTube ที่มีชื่อเดียวกัน ยินดีต้อนรับสู่โลกมหัศจรรย์ของพิกเซลสแควร์

เริ่มจากเรื่องราวกันก่อน Tetris เป็นเกมที่ตัวเลขประกอบด้วย 4 สี่เหลี่ยมตกจากบนลงล่าง ในชุดค่าผสมที่แตกต่างกันรูปร่างเหล่านี้สามารถหมุนและย้ายไปทางซ้ายและขวา เป้าหมายของเกมคือการรวบรวมระดับแนวนอนที่ถูกเคลียร์และให้คะแนนแก่คุณ การสูญเสียถือว่าเป็นช่วงเวลาที่ร่างใหม่ไม่มีที่ใดจะล้ม Tetris ถูกคิดค้นโดยโปรแกรมเมอร์โซเวียต Alexei Leonidovich Pazhitnov

ฉบับภาษาปาสกาลปรากฏในวันที่ 6 มิถุนายน 1984 ตั้งแต่นั้นมา Tetris ก็มาไกลและได้รับการย้ายไปทุกแพลตฟอร์มที่เป็นไปได้ในการเล่นเกมเช่นเดียวกับอุปกรณ์ที่ไม่ได้มีไว้สำหรับเกมเลยเช่นเครื่องคิดเลขทางวิศวกรรมเครื่องออสซิลโลสโคปและคุณจะไม่เชื่อ



ด้วยจำนวนเวอร์ชั่นเชิงพาณิชย์ที่ขายได้ Tetris นั้นเหนือกว่าเกมอื่น ๆ ในประวัติศาสตร์ของมนุษยชาติ สำหรับเด็กชายเกมหนึ่งคนมียอดขาย 35 ล้านชุดไม่พูดถึงเกมพกพาอิฐซึ่งเกือบทั้งหมดมีในคราวเดียว
เราจะเริ่มใช้ tetris บน arduino และเมทริกซ์สีพร้อมการวิเคราะห์“ ไม้ค้ำ” เมทริกซ์ประกอบด้วย LED ที่อยู่สามสี ปัญหาของเมทริกซ์ประเภทนี้ก็คือมันเจ๋งเกินไป สีของแต่ละพิกเซลมีการเข้ารหัสด้วย 24 บิตนั่นคือ 8 บิตสำหรับแต่ละองค์ประกอบ: สีแดงสีเขียวและสีน้ำเงิน ไม่มีข้อมูลประเภทนี้ใน arduino มีดังต่อไปนี้ - 32 บิต

สีของไฟ LED ทั้งหมดควรเก็บไว้ใน RAM ตามที่เราจะเปลี่ยน และนอกจากนี้สำหรับเมทริกซ์ขนาด 16 คูณ 16 เรามีหน่วยความจำแบบไดนามิกที่ใช้งานอยู่ 1 KB และ arduino nano มีเพียง 2 หน่วยเท่านั้น

เพิ่มอีกสองสามไลบรารีและเริ่มเขียนโค้ดหน่วยความจำจะสิ้นสุด ผู้เขียนโดยทั่วไปไม่ได้ใช้เช่น arduino mega ที่มีหน่วยความจำมากขึ้น เป้าหมายคือการทำให้เกมเป็นพิเศษใน arduino nano โดยใช้เครื่องมือมาตรฐานที่เรียบง่ายและเป็นที่รู้จัก แต่ในขณะเดียวกันวิธีการที่ไม่ได้มาตรฐานและ "ไม้ค้ำ" และด้วยความช่วยเหลือของพวกเขาเพื่อให้ได้รหัสที่เหมาะสมที่สุด

“ crutch” ตัวแรกคือการปฏิเสธที่จะจัดเก็บตำแหน่งของตัวเลขแยกกันในหน่วยความจำและโดยทั่วไปทุกอย่างที่เกิดขึ้นบนหน้าจอเราจำเป็นต้องจัดเก็บพิกัดของจุดของตัวเลขการให้อาหารและพิกัดของจุดของตัวเลขที่ลดลงแล้วนั่นคือสูงสุดเราต้องการอีก 1 อาร์เรย์สองมิติ 16 คูณ 16 และนี่เท่ากับ 256 ไบต์

คุณและฉันมีชุดสีมากมายสำหรับพิกเซลทั้งหมดมาใช้กันแล้ว นอกเหนือจากความจริงที่ว่าเราสามารถใส่จุดสีลงบนเมทริกซ์เราสามารถวัดแสงของจุดที่มีอยู่เพื่อให้เราทำงานกับสีได้

Tetris เริ่มต้นด้วยบล็อกล้มซึ่งถูกควบคุมโดยปุ่มและมี 2 พิกัดในระบบพิกัดเมทริกซ์ มันง่ายมากเราสร้างตัวจับเวลาตามที่บล็อกจะตกลง นี่คือห้องสมุดของผู้แต่งคุณสามารถอ่านได้บนเว็บไซต์

ในการประมวลผลปุ่มผู้เขียนยังใช้ห้องสมุดของเขา รูปแบบการเชื่อมต่อของปุ่มนั้นเรียบง่ายอย่างน่าขัน: 4 ปุ่ม, 8 สาย

แต่ละขั้นตอนของตัวจับเวลาเราวาดจุดหนึ่งพิกเซลด้านล่างเก่าและวาดจุดเก่าเป็นสีดำนั่นคือปิดไฟ LED โดยการคลิกที่ปุ่มเราก็ทำแบบเดียวกัน แต่ด้วยพิกัดแนวนอน เพื่อความเหมาะสมเราจะ จำกัด ขนาดของเมทริกซ์เพื่อให้จุดไม่เกินสนาม

ดูสิไม่มีอะไรซับซ้อน แต่นี่ไม่นานเพราะเวลามาถึงตัวเลข เราจะทำงานดังต่อไปนี้: เราจะเก็บการอ้างอิงไปยังจุดจัดหาซึ่งเราได้เขียนไว้แล้วเราจะเรียกมันว่าจุดหลักหรือบล็อกหลัก บล็อกหลักเคลื่อนที่ในระบบพิกัดเมทริกซ์เราได้ทำไปแล้ว ตัวเลขทั้งหมดของ Tetris ประกอบด้วย 4 ช่วงตึกซึ่งเป็นสาเหตุที่เรียกว่า Tetris

ดังนั้นเราจึงต้องเพิ่มบล็อกอีก 3 บล็อกลงในบล็อกหลัก ลองเขียนพิกัดของพวกเขาในระบบพิกัดของบล็อกหลักเพื่อให้บล็อกหลักอยู่ด้านล่างเสมอ ง่ายมากนำรูปตัวอักษรฤvertedษี T บล็อกหลักจากด้านล่างไปยังจุดกึ่งกลางมีพิกัด 0.0 ในระบบพิกัด

บล็อกด้านบนคือ 0.1 ด้านขวาคือ 1.1 และด้านซ้ายคือ -1.1

นำตัวอักษร G บล็อกที่ต่ำกว่าคือ 0.0, 0.1 ถัดไป, 0.2 ถัดไปและขอบของตัวอักษร 1.2

เราเขียนพิกัดเหล่านี้ลงในอาร์เรย์ในรูปแบบต่อไปนี้: {0.1, 0.2, 1.2} และวางอาร์เรย์ลงในหน่วยความจำแฟลชเพื่อไม่ให้เปลืองหน่วยความจำแบบไดนามิก สำหรับการหมุนของตัวเลข เป็นไปไม่ได้ที่จะหมุนภาพ มันซ้ำซากยากที่จะอธิบายให้ไมโครคอนโทรลเลอร์ทราบถึงวิธีการทำเช่นนี้ ในการทำเช่นนี้คุณต้องตั้งจุดศูนย์กลางของการหมุนอย่างใดอย่างหนึ่งสลายรูปเป็นส่วนและมองหาพิกัดใหม่สำหรับแต่ละส่วนคำนึงถึง pixelation ที่แข็งแกร่งซึ่งจะนำไปสู่ข้อผิดพลาดอย่างเห็นได้ชัดและมันจะกลายเป็นเรื่องไร้สาระ ปัญหาได้รับการแก้ไขอย่างง่ายดายเราจะเก็บไว้ในความทรงจำทั้ง 4 ตำแหน่งสำหรับทุกรูปและทั้งหมด

ที่จริงแล้วตอนนี้มันยังคงสุ่มเลือกหมายเลขรูปและวาดมันไปรอบ ๆ บล็อกล้ม ที่นี่สำหรับบล็อกที่เหลือทั้ง 3 บล็อกเรานำพิกัดจากหน่วยความจำแฟลชแปลเป็นพิกัดทั่วโลกของเมทริกซ์และเปิดไฟ LED โดยวิธีการที่สีที่เลือกยังสุ่มจาก 6 สีที่ง่ายที่สุดและสดใสของพื้นที่ rgb มุมของการหมุนของรูปที่จุดเริ่มต้นของรอบถูกตั้งค่าแบบสุ่มและเมื่อคุณกดปุ่มขึ้นเพียงใช้พิกัดชุดถัดไปเพื่อวาดและหมุนตามเข็มนาฬิกา การย้ายรูปร่างใช้งานได้เหมือนกันทั้งหมด อันดับแรกเราลบตัวเลขที่ตำแหน่งก่อนหน้านั่นคือวาดเป็นสีดำจากนั้นในตำแหน่งใหม่จะวาดสีปัจจุบันของรูป เมื่อหมุนอีกครั้งเราจะลบตำแหน่งเดิมและเพิ่งวาดตำแหน่งใหม่

สามารถดาวน์โหลดเฟิร์มแวร์ได้ที่ เราจะวิเคราะห์สาระสำคัญเท่านั้น เริ่มต้นด้วยการตรวจสอบกำแพงด้านซ้ายและขวาและด้านล่าง ทุกอย่างง่ายมากที่ด้านล่างเรามองไปที่แต่ละขั้นตอนของการตกมีหน่วยฐานถึงความสูงของ 0 นี้ไม่ยาก แต่ทุกครั้งที่เรากดปุ่มควบคุมที่เราต้องดูว่าจุดสุดยอดของรูปสัมผัสผนังด้านข้างของเมทริกซ์

หากสัมผัสอย่าย้ายร่าง เช่นเดียวกันสำหรับการหมุนของตัวเลข ตัวอย่างเช่นหากตำแหน่งใหม่ของรูปขยายออกไปจากผนังดังนั้นการหมุนจึงเป็นสิ่งต้องห้ามและเนื่องจากรูปร่างทั้งหมดที่เรามีมีรูปร่างแตกต่างกัน มันจะเป็นไปได้ที่จะวาดบล็อกสุดขีดของแต่ละบุคคลสำหรับแต่ละร่างเพื่อทำให้การทำงานของไมโครคอนโทรลเลอร์ง่ายขึ้น แต่ให้พิจารณาว่าพวกเขาคิดค้นมันขึ้นมาสำหรับเรื่องนี้

ทุกอย่างง่ายมาก แต่งานต่อไปน่าสนใจกว่ามาก เราต้องตรวจสอบการชนกับบล็อกที่วางอยู่ด้านล่างถ้าเรามีอาร์เรย์ที่มีสถานะของเซลล์ทั้งหมดในฟิลด์มันจะง่ายขึ้น แต่เราจะใช้อาร์เรย์ของสีสำหรับพิกเซลของเทปดังนั้นเราจะมี "ไม้ค้ำ" ที่เจ๋งที่สุด ปัญหาที่แท้จริงคืออะไร ดูเหมือนว่าทุกอย่างจะง่ายร่างสีเขียวจะตกและทุกขั้นตอนของการตกการเปลี่ยนไปด้านข้างและการพยายามเลี้ยวทุกครั้งควรตรวจสอบว่าตัวเลขในตำแหน่งใหม่วางอยู่บนร่างที่โกหกแล้ว หากบล็อกทั้งหมดสีโดยรอบมีค่าเท่ากับสีดำหรือเท่ากับสีของภาพเราอนุญาตให้มีการเคลื่อนไหวในทิศทางที่ต้องการ สิ่งนี้จะทำงานจนกว่ารูปร่างด้านล่างของเราจะเป็นสีเดียวกับรูปร่างที่ตกลงมา นั่นคือ“ ไม้ยันรักแร้”: เราจะวาดรูปทรงที่ร่วงหล่นในสีที่ต่างกัน ทาสีใหม่ให้กับดวงตา แต่มองเห็นได้ชัดเจนสำหรับโปรแกรม สิ่งที่คุณต้องทำคือเพิ่มความสว่างของสีปัจจุบันของรูปร่างและนั่นคือทั้งหมด


ตัวเลขลดลงที่ด้านล่างหรือตัวเลขอื่นความสว่างของมันไม่เพิ่มขึ้นอย่างเห็นได้ชัดและในรอบใหม่ตัวเลขที่ตกลงมาจะไม่ทำให้สีของพวกเขาสับสนด้วยตนเองอีกต่อไปพวกเขาจะตกอยู่ที่มันและคงที่เพียงเพิ่มความสว่างเล็กน้อย

โดยวิธีการเมื่อคุณกดปุ่มลงรูปที่วิ่งลงด้วยความเร็วสูงและใช้สถานที่

Tetris ของเราถูกปล่อยทิ้งไว้พร้อมสัมผัสสุดท้ายคือการตรวจสอบและล้างระดับที่บรรจุในแนวนอน ทุกอย่างเรียบง่ายที่นี่ หลังจากแก้ไขรูปในรอบปัจจุบันเราเคลื่อนที่ตามเส้นและเปรียบเทียบสีของพิกเซลด้วยสีดำ หากไม่มีพิกเซลดำเดียวในทั้งบรรทัดเราจะล้างทั้งบรรทัด


เส้นที่ตรวจพบจะเต็มไปด้วยสีขาวจากนั้นความสว่างจะลดลงเหลือศูนย์และได้รับภาพเคลื่อนไหว นอกจากนี้พิกเซลทั้งหมดที่เริ่มจากบรรทัดแรกที่เติมไปด้านบนจะถูกเลื่อนลงและจำนวนของบรรทัดที่ถูกลบออก กระบวนการนี้ซ้ำจนกว่าจะไม่มีระดับที่เสร็จสมบูรณ์ นอกจากนี้เรายังตรวจสอบว่าเราไปถึงด้านบนซึ่งหมายถึงการสูญเสีย ในกรณีนี้บัญชีจะเท่ากับจำนวนระดับที่เคลียร์จะปรากฏขึ้น

บัญชีจะแสดงเป็นตัวเลขซึ่งถูกเก็บไว้ในหน่วยความจำเป็นชุดของหนึ่งและศูนย์โดยที่ไฟ LED จะเปิดหรือปิด นี่คือสิ่งที่เตตริสเขียนในเมทริกซ์แอดเดรสดูเหมือน ขอบคุณสำหรับความสนใจของคุณ แล้วพบกันเร็ว ๆ นี้!

วิดีโอ:
10
10
10

เพิ่มความคิดเห็น

    • รอยยิ้มรอยยิ้มxaxaตกลงdontknowyahooNea
      นายรอยขีดข่วนคนโง่ใช่ใช่ใช่ก้าวร้าวลับ
      ขอโทษเต้นdance2dance3ให้อภัยช่วยเหลือเครื่องดื่ม
      หยุดเพื่อนดีgoodgoodนกหวีดหน้ามืดตามัวลิ้น
      ควันการตบมือเครย์ประกาศเป็นขี้ปากดอน t_mentionดาวน์โหลด
      ความร้อนโมโหlaugh1ภาคตะวันออกเฉียงเหนือประชุมmoskingเชิงลบ
      not_iข้าวโพดคั่วลงโทษอ่านทำให้ตกใจกลัวค้นหา
      ยั่วยุthank_youนี้to_clueumnikรุนแรงเห็นด้วย
      ไม่ดีbeeeblack_eyeblum3หน้าแดงโม้ความเบื่อ
      เซ็นเซอร์การหยอกล้อsecret2ขู่ชัยชนะYusun_bespectacled
      shokrespektฮ่า ๆprevedยินดีต้อนรับkrutoyya_za
      ya_dobryiผู้ช่วยne_huliganne_othodiFLUDห้ามใกล้

เราแนะนำให้คุณอ่าน:

มอบให้กับสมาร์ทโฟน ...