54
โครงงาน การพัฒนาเกมส์ Twingle จัดทำโดย นางสาว ธนิดา ไพศาลศิริรัตน์ 52214527 นางสาว ธีรนุช จั่นเรือง 52214530 นาย อมร เฉลิมทรง 52214549 นาย อิทธิรัตน์ หลักกรต 52214554 นางสาว เมทินี ภูพิชิต 52214557 มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี ภาควิชาคอมพิวเตอร์และเทคโนโลยีสารสนเทศ สาขาวิชาวิทยาการคอมพิวเตอร์ประยุกต์-มัลติมีเดีย เสนอ ผศ.ดร.อาษา ตั้งจิตสมคิด CMM342 Game Development I The Twingle Project

Twingle Final Project

Embed Size (px)

DESCRIPTION

ปัจจุบันนี้เกมเป็นที่ต้องการของคนทั่วโลกสามารถเล่นได้ทุกวัยทุกเพศ เนื่องจากจะทำให้ผ่อนคลายจากการทำงานหรือเรียนหนังสือแล้ว เกมยังช่วยพัฒนาสมองให้รู้จักคิดวางแผนได้มากขึ้น Twingle เป็นอีกเกมที่สามารถฝึกทักษะ ความคิด ความจำ และการสังเกตได้เป็นอย่างดี Twingle คือเกมเปิดไพ่จับคู่ ซึ่งการเล่นเกมประเภทนี้ จะทำให้ผู้เล่นใช้ความสามารถในด้านของการจำและการเฝ้าสังเกตรายละเอียดต่างๆ โดยมีระดับความง่ายจนไปถึงยาก ซึ่งเกม Twingle มีทั้งโหมดที่ผ่อนคลาย ที่ผู้เล่นสามารถเล่นได้เรื่อยๆ และโหมดที่เล่นแบบมีข้อจำกัด เช่น มีการจำกัดจำนวนครั้งของการเปิดไพ่ได้ ทำให้เกมนี้เหมาะสำหรับผู้เล่นทุกวัย และแฝงไปด้วยความสนุกเพลิดเพลิน

Citation preview

Page 1: Twingle Final Project

โครงงาน

การพัฒนาเกมส์ Twingle

จัดทำโดย

นางสาว ธนิดา ไพศาลศิริรัตน์ 52214527

นางสาว ธีรนุช จั่นเรือง 52214530

นาย อมร เฉลิมทรง 52214549

นาย อิทธิรัตน์ หลักกรต 52214554

นางสาว เมทินี ภูพิชิต 52214557

มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี

ภาควิชาคอมพิวเตอร์และเทคโนโลยีสารสนเทศ

สาขาวิชาวิทยาการคอมพิวเตอร์ประยุกต์-มัลติมีเดีย

เสนอ

ผศ.ดร.อาษา ตั้งจิตสมคิด

CMM342  Game  Development  I                              The  Twingle  Project

Page 2: Twingle Final Project

บทคัดย่อ

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

หรือเรียนหนังสือแล้ว เกมยังช่วยพัฒนาสมองให้รู้จักคิดวางแผนได้มากขึ้น Twingle เป็นอีกเกมที่สามารถฝึกทักษะ ความ

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

ในด้านของการจำและการเฝ้าสังเกตรายละเอียดต่างๆ โดยมีระดับความง่ายจนไปถึงยาก ซึ่งเกม Twingle มีทั้งโหมดที่ผ่อน

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

เหมาะสำหรับผู้เล่นทุกวัย และแฝงไปด้วยความสนุกเพลิดเพลิน

CMM342  Game  Development  I                              The  Twingle  Project

Page 3: Twingle Final Project

กิตติกรรมประกาศ

โครงการพัฒนาเกมส์ Twingle นี้ได้รับความสำเร็จไปได้ด้วยดี เพราะได้รับความช่วยเหลือจาก อาจารย์ผู้สอน เป็น

อย่างมากในเรื่องของการให้คำแนะนำในการปัญหาต่างๆ ที่เกิดขึ้นในขณะทำการพัฒนาโครงการนี้ และให้คำปรึกษาต่าง

มากมาย

และสุดท้ายต้องขอขอบคุณ ผศ.ดร.อาษา ตั้งจิตสมคิด อาจารย์ผู้สอนวิชา CMM 342 Game development I

สำหรับความรู้ในการเขียนเกมส์ คำแนะนำ คำปรึกษา และผู้สนับสนุนโครงการ เป็นอย่างมาก ส่งผลให้โครงการนี้สำเร็จ

ลุล่วงไปได้ด้วยดี และ เกิดปัญหาน้อยที่สุด

คณะผู้จัดทำ

CMM342  Game  Development  I                              The  Twingle  Project

Page 4: Twingle Final Project

คำนำ

โครงการพัฒนาเกมส์ Twingle เป็นส่วนหนึ่งของวิชา CMM 342 Game Development I จัดทำขึ้นเพื่อพัฒนา

เกมส์ Twingle บน PSP ให้สมบูรณ์ที่สุด เรียนรู้ขั้นตอนการเขียนเกมส์บน PSP โดยใช้ซอฟแวร์ Arsa Framework ใน

การเขียน และพัฒนาเกมส์ขึ้นมา อีกทั้งยังฝึกในกระบวนการคิด การทำงานร่วมกัน

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

ให้กับผู้ที่นำโครงการนี้ไปพัฒนา ไม่มากก็น้อย

ขอบคุณเป็นอย่างสูง

คณะผู้จัดทำ

CMM342  Game  Development  I                              The  Twingle  Project

Page 5: Twingle Final Project

1. ชื่อโครงการ : Twingle2. ความเป็นมาและความสำคัญปัจจุบันนี้เกมเป็นที่ต้องการของคนทั่วโลกสามารถเล่นได้ทุกวัยทุกเพศ เนื่องจากจะทำให้ผ่อนคลายจากการทำงานหรือเรียนหนังสือแล้ว เกมยังช่วยพัฒนาสมองให้รู้จักคิดวางแผนได้มากขึ้น Twingle เป็นอีกเกมที่สามารถฝึกทักษะ ความคิด ความจำ และการสังเกตได้เป็นอย่างดี Twingle คือเกมเปิดไพ่จับคู่ ซึ่งการเล่นเกมประเภทนี้ จะทำให้ผู้เล่นใช้ความสามารถในด้านของการจำและการเฝ้าสังเกตรายละเอียดต่างๆ โดยมีระดับความง่ายจนไปถึงยาก ซึ่งเกม Twingle มีทั้งโหมดที่ผ่อนคลาย ที่ผู้เล่นสามารถเล่นได้เรื่อยๆ และโหมดที่เล่นแบบมีข้อจำกัด เช่น มีการจำกัดจำนวนครั้งของการเปิดไพ่ได้ ทำให้เกมนี้ เหมาะสำหรับผู้เล่นทุกวัย และแฝงไปด้วยความสนุกเพลิดเพลิน

ที่มาของ Twingle คือจากคำว่า Twin ซึ่งแปลว่าแฝด ซึ่งลักษณะของเกมเป็นแบบเล่นได้ทุกวัย โดยเน้นที่วัยเด็ก จึงเติม ข gle ซึ่งจะพ้องเสียงกับคำว่า Twinkle ที่แปลว่า ระยิบระยับ แวววาว3. อาจารย์ที่ปรึกษาโครงงาน : ผศ.ดร.อาษา ตั้งจิตสมคิด4. วัตถุประสงค์

เพื่อพัฒนาโครงการเกม Twingle ให้นักศึกษาสามารถสร้างเกมในรูปแบบต่างๆได้เพื่อศึกษาวิธีการเขียนเกมเพื่อฝึกทักษะในการเขียนเกมเพื่อเสริมสร้างกระบวนการทำงานเป็นกลุ่มให้มีประสิทธิภาพมากขึ้น

5. ขอบเขตของโครงการนักศึกษาสามารถเขียนโปรแกรมการสร้างเกมในรูปแบบที่มีความสนใจเกมที่สร้างขึ้นมาต้องเล่นได้จริงนักศึกษาสามารถแก้ไขปัญหาที่เกิดขึ้นได้เสริมสร้างให้มีความคิดสร้างสรรค์และสามารถนำมาพัฒนาต่อได้

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

7. เครื่องมือที่ใช้พัฒนาMicrosoft Visual C++ 2010 , Arsa Framework (PSP) , Adobe Photoshop , Adobe Illustratorภาษาที่ใช้เขียน C++

CMM342  Game  Development  I                              The  Twingle  Project

Page 6: Twingle Final Project

8. ระยะเวลาในการดำเนินงาน

ขั้นตอนในการดำเนินงาน ระยะเวลาในการดำเนินงาน หมายเหตุ

1.ค้นคว้าหาข้อมูล 3 ม.ิย – 10 ม.ิย 54

2.รวบรวมข้อมูลที่ได้ 11 ม.ิย – 15 ม.ิย 54

3.ศึกษาข้อมูล 16 ม.ิย – 30 ม.ิย 54

4.วิเคราะห์และออกแบบ 1 ก.ค – 18 ก.ค 54

5.เขียนโปรแกรม 1 ส.ค – 20 ส.ค 54

6.ตรวจสอบและแก้ไขข้อผิดพลาด 21 ส.ค – 16 ก.ย 54

7.ทดลองการใช้ 17 ก.ย – 20 ก.ย 54

8.จัดทำรายงาน 21 ก.ย – 30 ก.ย 54

9. ผู้จัดทำโครงการนางสาวธนิดา ไพศาลศิริรัตน์ 52214527นางสาวธีรนุช จั่นเรือง 52214530นายอมร เฉลิมทรง 52214549นายอิทธิรัตน์ หลักกรต 52214554นางสาวเมทินี ภูพิชิต 52214557

10. อ้างอิง

Arsa Framework

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

ไม่กี่คำสั่ง การเก็บแต้มเพียงแค่เก็บไว้ในตัวแปร การสร้างตัวละครแค่เขียนคำสั่งไม่กี่บันทัด ก็ได้เกมออกมาอย่างง่ายดาย คำสั่งของArsa

Framework แต่ละคำสั่งจะอยู๋ใน Library ดังนี้ #include <cdx_app_wiz.h> ซึ่งได้รวบร่วมคำสั่งหลักๆไว้ในการเขียนเกม เช่น การบังคับ

การสร้างรูปภาพ การเลื่อนตำแหน่ง การทำให้โปร่งใส และทึบ การใช้คำสั่งเชคการชนของวัตถุ โปรแกรมอาษาเฟรมเวร์คได้รวมไว้ทั้งหมด ถ้า

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

รวมไปถึงฟิสิกส์ สุดแท้แต่เกมที่ท่านจะออกแบบ

ARSA Framework เป็นเครื่องมือที่ช่วยในการพัฒนาเกม 2 มิติ และ 3 มิติ โดยผู้เขียนได้แจกจ่ายให้นักพัฒนาเกมส์ได้ใช้ฟรี ซึ่งเป็น

เรื่องน่ายินดีในการสร้างเครื่องพัฒนาเกมส์ในบ้านเรา โครงสร้าง ARSA Framework แบบ 2 มิติ ประกอบด้วย class ต่างๆมากมาย เพื่อ

CMM342  Game  Development  I                              The  Twingle  Project

Page 7: Twingle Final Project

จัดการหน้าจอ เปิดปิดโหมดเกมส์ในความละเอียดต่างๆเพื่อโหลดและแสดงภาพไปที่หน้าจอ สามารถแสดงภาพได้ทั้ง bmp,jpg,pcx,psd,png

และ tga รวมถึงการแสดงแบบ animation เพื่อจัดการเสียงต่างๆ และอีกมากมายในการอำนวยความสะดวกให้กับนักพัฒนาเกมส์ 2 มิติ

สำหรับเกม 3 มิติ ARSA Framework ถูกออกแบบมาเพื่อรองรับเกม 3 มิติในแบบ Cross Platform สามารถแสดงผลได้แบบ

Engine ระดับ World Wildทำให้เกมส์มีความเร็วในการแสดงผลเพิ่มขึ้นและได้ภาพที่สมจริง สมดุลกับธรรมชาติ

ภาษาซี

ภาษาซี (C) เป็นภาษาโปรแกรมบนคอมพิวเตอร์ที่มีวัตถุประสงค์ทั่วไป พัฒนาขึ้นเมื่อ พ.ศ. 2515 (ค.ศ. 1972) โดย เดนนิส ริตชี ที่

เบลล์เทเลโฟนแลบอลาทอรีส์ (Bell Telephone Laboratories) เกิดขึ้นเพื่อสร้างระบบปฏิบัติการยูนิกซ์ในขณะนั้นนอกจากภาษาซีออกแบบขึ้น

มาเพื่อสร้างซอฟต์แวร์ระบบแล้ว ภาษาซียังสามารถใช้อย่างแพร่หลายเพื่อพัฒนาซอฟต์แวร์ประยุกต์ที่เคลื่อนย้าย (portable) ไปบนระบบอื่น

ได้อีกด้วย

ภาษาซีเป็นภาษาโปรแกรมหนึ่งที่ได้รับความนิยมมากที่สุดตลอดกาล มีสถาปัตยกรรมคอมพิวเตอร์เพียงส่วนน้อยเท่านั้นที่ไม่มีตัวแปล

โปรแกรมของภาษาซี ภาษาซีมีอิทธิพลอย่างมากต่อภาษาโปรแกรมที่นิยมอื่น ๆ ที่เด่นชัดที่สุดก็คือภาษาซีพลัสพลัส ซึ่งเดิมเป็นส่วนขยายของ

ภาษาซี

1.1 ลักษณะเฉพาะ

ภาษาซีมีสิ่งอำนวยสำหรับการเขียนโปรแกรมเชิงโครงสร้าง และสามารถกำหนดขอบข่ายตัวแปรและเรียกซ้ำ เช่นเดียวกับภาษา

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

ทำงานได้ทั้งหมดในภาษาซีถูกบรรจุอยู่ในฟังก์ชัน พารามิเตอร์ของฟังก์ชันส่งผ่านด้วยค่าของตัวแปรเสมอ ส่วนการส่งผ่านด้วยการอ้างอิง

จะถูกจำลองขึ้นโดยการส่งผ่านค่าตัวชี้ ชนิดข้อมูลรวมแบบแตกต่าง (struct) ช่วยให้สมาชิกข้อมูลที่เกี่ยวข้องกันสามารถรวมกันและจัดการได้ใน

หน่วยเดียว รหัสต้นฉบับของภาษาซีเป็นรูปแบบอิสระ ซึ่งใช้อัฒภาค (;) เป็นตัวจบคำสั่ง (มิใช่ตัวแบ่ง)

1.2 การใช้งาน

CMM342  Game  Development  I                              The  Twingle  Project

Page 8: Twingle Final Project

การเขียนโปรแกรมระบบเป็นการใช้งานหลักของภาษาซี ซึ่งรวมไปถึงการพัฒนาระบบปฏิบัติการและโปรแกรมประยุกต์ระบบฝังตัว

เนื่องจากลักษณะเฉพาะอันเป็นที่ต้องการถูกรวมเข้าไว้ด้วยกัน อย่างเช่น ความสามารถในเคลื่อนย้ายได้กับประสิทธิภาพของรหัสต้นฉบับ ความ

สามารถในการเข้าถึงที่อยู่ของฮาร์ดแวร์ที่ระบุ ความสามารถเรื่อง type punning เพื่อให้เข้ากับความต้องการการเข้าถึงข้อมูลที่กำหนดไว้จาก

ภายนอก และความต้องการทรัพยากรระบบขณะทำงานต่ำ ภาษาซีสามารถใช้เขียนโปรแกรมเว็บไซต์โดยใช้ซีจีไอเป็น "เกตเวย์" เพื่อแลกเปลี่ยน

สารสนเทศระหว่างเว็บแอปพลิเคชัน เซิร์ฟเวอร์ และเบราว์เซอร์ [10] ปัจจัยบางอย่างที่ทำให้เลือกภาษาซีแทนที่จะเป็นภาษาอินเทอร์พรีตเตอร์

คือความเร็ว เสถียรภาพ และความอ่อนไหวต่อการเปลี่ยนแปลงในสภาพแวดล้อมของการดำเนินงาน เนื่องจากเป็นธรรมชาติของภาษาคอมไพ

เลอร์

ผลจากการยอมรับในระดับกว้างขวางและประสิทธิภาพของภาษาซี ทำให้ตัวแปลโปรแกรม ตัวแปลคำสั่ง ไลบรารีต่าง ๆ ของภาษาอื่น

มักพัฒนาขึ้นด้วยภาษาซี ตัวอย่างเช่น ตัวแปลโปรแกรมภาษาไอเฟลหลายโปรแกรมส่งข้อมูลออกเป็นรหัสภาษาซีเป็นภาษากลาง เพื่อส่งต่อให้

ตัวแปลโปรแกรมภาษาซีต่อไป การพัฒนาสายหลักของภาษาไพทอน ภาษาเพิร์ล 5 และภาษาพีเอชพี ทั้งหมดถูกเขียนขึ้นด้วยภาษาซี

ภาษาซีมีประสิทธิภาพสำหรับคอมพิวเตอร์เพื่องานคำนวณและวิทยาศาสตร์ เนื่องจากความสิ้นเปลืองต่ำ ธรรมชาติของภาษาระดับ

ต่ำ ธรรมชาติของภาษาที่ถูกแปล และมีส่วนคณิตศาสตร์ที่ดีในไลบรารีมาตรฐาน ตัวอย่างของการใช้ภาษาซีในงานคำนวณและวิทยาศาสตร์ เช่น

จีเอ็มพี ไลบรารีวิทยาศาสตร์ของกนู แมเทอแมติกา แมตแล็บ และแซส

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

ภาษาซีเป็นภาษาระหว่างกลาง ซึ่งไม่จำเป็นต้องพัฒนาตัวสร้างรหัสแบบเจาะจงเครื่อง ตัวแปลโปรแกรมที่ใช้ภาษาซีในทางนี้เช่น บิตซี แกมบิต จี

เอชซี สควีก และวาลา เป็นต้น อย่างไรก็ตามภาษาซีถูกออกแบบมาเพื่อเป็นภาษาเขียนโปรแกรม ไม่ใช่ภาษาเป้าหมายของตัวแปลโปรแกรม จึง

เหมาะสมน้อยกว่าสำหรับการใช้เป็นภาษาระหว่างกลาง ด้วยเหตุผลนี้นำไปสู่การพัฒนาภาษาระหว่างกลางที่มีพื้นฐานบนภาษาซีเช่น ภาษา

ซีไมนัสไมนัส

ผู้ใช้ขั้นปลายใช้ภาษาซีอย่างแพร่หลายเพื่อสร้างแอปพลิเคชันของผู้ใช้เอง แต่เมื่อแอปพลิเคชันใหญ่ขึ้น การพัฒนาเช่นนั้นมักจะย้ายไป

ทำในภาษาอื่นที่พัฒนามาด้วยกัน เช่นภาษาซีพลัสพลัส ภาษาซีชาร์ป ภาษาวิชวลเบสิก เป็นต้น

CMM342  Game  Development  I                              The  Twingle  Project

Page 9: Twingle Final Project

Photoshop

Adobe Photoshop คือชื่อเต็มของโปรแกรมนี้ ที่ใช้สำหรับการตกแต่งภาพ แก้ไขภาพ ย่อขนาด เปลี่ยนประเภทไฟล์ หรือหลายๆ คน

อาจเคยได้ยินคำว่า Retouch ภาพซึ่งก็มีความหมายในแนวเดียวกัน โปรแกรม photoshop นี้ถือได้ว่าเป็นโปรแกรมที่ดีที่สุด และน่าใช้ที่สุด

สำหรับการแก้ไขภาพก็ว่าได้ เรียกว่า ถ้าพูดถึงการแก้ไขรูปภาพดิจิตอล ต้องพูดถึงโปรแกรม Adobe Photoshop เลยทีเดียว

เราสามารถเรียนรู้วิธีการใช้โปรแกรม Adobe Photoshop นี้ได้ด้วยตัวเอง รับรอง คุณสามารถที่จะทำการแก้ไขภาพ ตกแต่งภาพ

ซ้อนภาพในรูปแบบต่างๆ ได้อย่างง่ายดาย พร้อมกันนี้ที่ขาดไม่ได้ก็คือ การใส่ข้อความประกอบลงในภาพของเรา และเนื่องด้วย Adobe

Photoshop มีการพัฒนาโปรแกรมมาอย่างต่อเนื่อง ทำให้เราจำเป็นต้องศึกษาคำสั่งต่างๆ ให้เข้าใจ แต่ที่สำคัญ เมื่อคุณเรียนรู้การใช้คำสั่งใน

เวอร์ชั่นเก่า คุณก็ยังคงสามารถนำไปประยุกต์ใช้กับเวอร์ชั่นใหม่ๆ ได้ด้วย

ความสามารถพื้นฐานของ Adobe Photoshop ที่ควรทราบ

• ตกแต่งหรือแก้ไขรูปภาพ

• ตัดต่อภาพบางส่วน หรือที่เรียกว่า crop ภาพ

CMM342  Game  Development  I                              The  Twingle  Project

Page 10: Twingle Final Project

• เปลี่ยนแปลงสีของภาพ จากสีหนึ่งเป็นอีกสีหนึ่งได้

• สามารถลากเส้น แบบฟรีสไตล์ หรือใส่รูปภาพ สี่เหลี่ยม วงกลม หรือสร้างภาพได้อย่างอิสระ

• มีการแบ่งชั้นของภาพเป็น Layer สามารถเคลื่อนย้ายภาพได้เป็นอิสระต่อกัน

• การทำ cloning ภาพ หรือการทำภาพซ้ำในรูปภาพเดียวกัน

• เพิ่มเติมข้อความ ใส่ effect ของข้อความได้

• Brush หรือแปรงทาสี ที่สามารถเลือกรูปแบบสำเร็จรูปในการสร้างภาพได้

• และอื่นๆ อีกมากมาย

นอกจากนี้ ยังมีโปรแกรมเสริมที่ช่วยให้การตกแต่งภาพด้วย Photoshop เป็นเรื่องง่ายๆ อีก นั่นคือ Plug-ins ของ

Photoshop ซึ่งได้แก่ การปรับภาพจากภาพถ่าย มาเป็นภาพแบบวาดด้วยสีน้ำ ภาพลายการ์ตูน เป็นภาพลายเส้น เป็นต้น สำหรับ Plug-ins ที่

เป็นที่นิยมใช้กับ Photoshop ได้แก่

• AlienSkin Eye Candy

• Extensis Photo Frame

• Extensis Photo Graphics

• Extensis Photo Tools

• Kai's Power Tools

CMM342  Game  Development  I                              The  Twingle  Project

Page 11: Twingle Final Project

ตัวอย่างงาน

CMM342  Game  Development  I                              The  Twingle  Project

Page 12: Twingle Final Project

Illustrator โปรแกรม Illustrator เป็นโปรแกรมสำหรับสร้างภาพลายเส้นที่มีความคมชัดสูง งานภาพประกอบและงานกราฟิกแบบ 2 มิติต่างๆ เช่น

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

แบบคือ 1.ภาพแบบพิกเซล (pixel) คือ ภาพที่เกิดจากจุดภาพในรูปภาพที่รวมกันเป็นภาพขึ้น โดยภาพหนึ่งๆ จะประกอบไปด้วยจุดภาพหรือ

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

การบอกคุณสมบัติของภาพ จอภาพ หรือ อุปกรณ์แสดงผลภาพได้ 2.ภาพกราฟิกส์เวกเตอร์ (vector graphics) คือ ภาพที่เกิดจากการ

กำหนดพิกัดและการคำนวณค่าบนระนาบสองมิติ รวมทั้งมุมและระยะทาง ตามทฤษฎีเวกเตอร์ในทางคณิตศาสตร์ ในการก่อให้เกิดเป็น เส้น หรือ

รูปภาพ ข้อดีคือ ทำให้สามารถย่อขยายได้ โดยคุณภาพไม่เปลี่ยนแปลง ข้อเสียคือภาพไม่เหมือนภาพจริงเป็นได้เพียงภาพวาด หรือใกล้เคียง

ภาพถ่ายเท่านั้น ข้อมูลภาพพวกนี้ได้เเก่ไฟล์สกุล eps, ai (adobe illustrator) เป็นต้น ** โปรแกรม Illustrator ทำงานแบบ vector graphics

ความแตกต่างระหว่างรูปแบบ vector และแบบ pixel

ตัวอย่างงาน

CMM342  Game  Development  I                              The  Twingle  Project

Page 13: Twingle Final Project

ภาคผนวก

CMM342  Game  Development  I                              The  Twingle  Project

Page 14: Twingle Final Project

Background ด่านที่ 1-4

CMM342  Game  Development  I                              The  Twingle  Project

Page 15: Twingle Final Project

CMM342  Game  Development  I                              The  Twingle  Project

Page 16: Twingle Final Project

Logo ของ เกม

CMM342  Game  Development  I                              The  Twingle  Project

Page 17: Twingle Final Project

How to Play

Credits

CMM342  Game  Development  I                              The  Twingle  Project

Page 18: Twingle Final Project

CMM342  Game  Development  I                              The  Twingle  Project

Page 19: Twingle Final Project

ฉาก You Win และ Game Over

CMM342  Game  Development  I                              The  Twingle  Project

Page 20: Twingle Final Project

หน้าต่าง Pause

หน้าต่างเลือก Difficulty

CMM342  Game  Development  I                              The  Twingle  Project

Page 21: Twingle Final Project

รูปของไพ่ทั้ง 13 ใบ ขนาด 65x90

รูปของไพ่ 12 ใบขนาด 45x60

CMM342  Game  Development  I                              The  Twingle  Project

Page 22: Twingle Final Project

ตัว Pointer ต่างๆ

CMM342  Game  Development  I                              The  Twingle  Project

Page 23: Twingle Final Project

Source Code// This code is for Game Project :: Twingle// CMM342 Game Development I Semester 1 2011// Written by Amon C and team of Pohthe Studio#include <cdx_app_wiz.h>#include <time.h>#include <windows.h>#define Draw Draw( Screen->GetBack(), 0, 0,CDXBLT_TRANS );// ------------------------------------------------------------------// CDX Objects// ------------------------------------------------------------------CDXScreen *Screen = 0; // The screen object, every program must have oneCDXInput *Input = 0;FPSmanager *Fps = 0;

// Timing Definitiontime_t start;time_t end;float second;int level = 1; // Start at Level 1int creditdelay = 0; // Delay Credit Timeint previewdelay = 0;// Picture Managerint alphapercentage = 0;CDXSprite *company_logo = 0;CDXSprite *menu = 0;CDXSprite *selector = 0;CDXSprite *gamebackground1 = 0;CDXSprite *gamebackground2 = 0;CDXSprite *gameselector = 0;CDXSprite *pause=0;CDXSprite *pauseselector=0;CDXSprite *gameover = 0;CDXSprite *difficultselect = 0;CDXSprite *difficultselector = 0;CDXSprite *instruction = 0;CDXSprite *credit = 0;CDXSprite *creditcontent = 0;CDXSprite *gameresult = 0;// Sound

CMM342  Game  Development  I                              The  Twingle  Project

Page 24: Twingle Final Project

CDXSnd *bgmsound = 0;// Miscellaneousint menuselect = 2; // Default menu = 2int difficultmode = 1; // Default is Easyint pauseselect = 1; // Default Select menu = 1;int cardgameselect = 1; // Default is 1int numberofselectedcard = 0;int indexselect1 = 0;int indexselect2 = 0;int cardnumber = 0;int nextbackground = 480;int live = 10;float duration = 0;//Game's Booleanbool Level1WasPlay = false; // Check Level 1 was in progressbool Level2WasPlay = false; // Check Level 2 was in progressbool Level3WasPlay = false; // Check Level 3 was in progressbool Level4WasPlay = false; // Check Level 4 was in progressbool Pausing = false; // Check pause screen was in progressbool soundplaying = true; // Sound Playing checkbool isIntroductionWasEnd = false; // Check Introduction was endbool menuWasSelected = false; // Check Which menu was selectbool selectionWasMove = false; // Check selection movingbool isLevelChanging = false; // Check is Level Changing Transtion Was Playing ?bool isLevelChanged = false; // Check is Level Changing Transtion Was Playing ?bool isGameReset = false; // Check is game was resetting by userbool isGameOver = false; // Check is Game was overbool isCardPreview = true; // Check is game was preview statebool enterpress = false; // Check is enter was releasebool enterrelease = false; // Check is enter was releasebool isDifficultywasSelect = false;// Runoncebool runonce0 = false; // Control Game Changing Level Transitionbool runonce1 = false; // Control Game Levelbool runonce2 = false; // Control Game finish or game over statebool runonce3 = false; // Control Fadingbool runonce4 = false; // Control Card Preview// Card Structuretypedef struct { CDXSprite* picture; int match; bool isCardSelected; bool cardWasEliminated;

CMM342  Game  Development  I                              The  Twingle  Project

Page 25: Twingle Final Project

int labeltest;}CARDINFO;CARDINFO card[24];

typedef struct { CDXSprite* hearts;}GAMELIVE;GAMELIVE livehearts[10];

// Function Declarationvoid introduction(int duration);void gamemenuselection();void cardpicture(int level);void gameplay(int level);void gamecontrol(int level);void gamechangelevel(int level);void pausemenu(int level);void livecontrol();void cardpreview();void gamedifficult();// ======================================================// My Game Functions// ======================================================void introduction(float duration) { // Show and Hide Splash if (duration < 0) { SAFEDELETE(company_logo); isIntroductionWasEnd = true; } else if (duration < 1 && duration >= 0) { // Fade Out gamelogo company_logo->SetAlpha(alphapercentage); if (alphapercentage <= 0) { alphapercentage == 0; } else { alphapercentage = alphapercentage-5; } company_logo->Draw( Screen->GetBack(), 0, 0,CDXBLT_TRANS ); } else if (duration < 3) { // Fade In gamelogo if(runonce3 == true) { company_logo->Create( "src/splash.png", 1 ); runonce3 = false; } company_logo->SetAlpha(alphapercentage); if (alphapercentage == 255) { alphapercentage == 255; } else { alphapercentage = alphapercentage+5; } company_logo->Draw( Screen->GetBack(), 0, 0,CDXBLT_TRANS ); } else if (duration < 5) { // Fade Out Company Splash company_logo->SetAlpha(alphapercentage); if (alphapercentage <= 0) { alphapercentage == 0; } else { alphapercentage = alphapercentage-5; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 26: Twingle Final Project

company_logo->Draw( Screen->GetBack(), 0, 0,CDXBLT_TRANS ); } else if (duration <= 7) { // Fade In Company Splash if (runonce3 == false) { company_logo->Create( "src/companysplash.png", 1 ); runonce3 = true; } company_logo->SetAlpha(alphapercentage); if (alphapercentage == 255) { alphapercentage == 255; } else { alphapercentage = alphapercentage+5; } company_logo->Draw( Screen->GetBack(), 0, 0,CDXBLT_TRANS ); }}void gamemenuselection() { menu->SetAlpha(alphapercentage); selector->SetAlpha(alphapercentage); if (alphapercentage == 255) { alphapercentage == 255; } else { alphapercentage = alphapercentage+15; } menu->Draw; selector->Draw; if( Input->GetKeyState(SDLK_RIGHT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN9) == CDXKEY_PRESS ) { if(menuselect == 1) { selector->SetPos(190,180); menuselect = 2;} else if(menuselect == 2) { selector->SetPos(303,180); menuselect = 3;} else if(menuselect == 3) { selector->SetPos(303,180); } } else if( Input->GetKeyState(SDLK_LEFT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN7) == CDXKEY_PRESS ) { if(menuselect == 1) { selector->SetPos(55,180); } else if(menuselect == 2) { selector->SetPos(55,180); menuselect = 1;} else if(menuselect == 3) { selector->SetPos(190,180); menuselect = 2;} } else if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS && alphapercentage == 255) { menuWasSelected = true; if(menuselect ==2) { alphapercentage = 0; runonce3 = true; } }}void cardpicture(int level) { if (level == 1) { if (card[0].isCardSelected == true) { card[0].picture->Create("src/card1.png",1); } else { card[0].picture->Create("src/cardtest.png",1); } if (card[1].isCardSelected == true) { card[1].picture->Create("src/card1.png",1); } else { card[1].picture->Create("src/cardtest.png",1); } if (card[2].isCardSelected == true) { card[2].picture->Create("src/card2.png",1); } else { card[2].picture->Create("src/cardtest.png",1); } if (card[3].isCardSelected == true) { card[3].picture->Create("src/card2.png",1); } else { card[3].picture->Create("src/cardtest.png",1); }

CMM342  Game  Development  I                              The  Twingle  Project

Page 27: Twingle Final Project

if (card[4].isCardSelected == true) { card[4].picture->Create("src/card3.png",1); } else { card[4].picture->Create("src/cardtest.png",1); } if (card[5].isCardSelected == true) { card[5].picture->Create("src/card3.png",1); } else { card[5].picture->Create("src/cardtest.png",1); } if (card[6].isCardSelected == true) { card[6].picture->Create("src/card4.png",1); } else { card[6].picture->Create("src/cardtest.png",1); } if (card[7].isCardSelected == true) { card[7].picture->Create("src/card4.png",1); } else { card[7].picture->Create("src/cardtest.png",1); } } if (level == 2) { if (card[0].isCardSelected == true) { card[0].picture->Create("src/card1.png",1); } else { card[0].picture->Create("src/cardtest.png",1); } if (card[1].isCardSelected == true) { card[1].picture->Create("src/card1.png",1); } else { card[1].picture->Create("src/cardtest.png",1); } if (card[2].isCardSelected == true) { card[2].picture->Create("src/card2.png",1); } else { card[2].picture->Create("src/cardtest.png",1); } if (card[3].isCardSelected == true) { card[3].picture->Create("src/card2.png",1); } else { card[3].picture->Create("src/cardtest.png",1); } if (card[4].isCardSelected == true) { card[4].picture->Create("src/card3.png",1); } else { card[4].picture->Create("src/cardtest.png",1); } if (card[5].isCardSelected == true) { card[5].picture->Create("src/card3.png",1); } else { card[5].picture->Create("src/cardtest.png",1); } if (card[6].isCardSelected == true) { card[6].picture->Create("src/card4.png",1); } else { card[6].picture->Create("src/cardtest.png",1); } if (card[7].isCardSelected == true) { card[7].picture->Create("src/card4.png",1); } else { card[7].picture->Create("src/cardtest.png",1); } if (card[8].isCardSelected == true) { card[8].picture->Create("src/card5.png",1); } else { card[8].picture->Create("src/cardtest.png",1); } if (card[9].isCardSelected == true) { card[9].picture->Create("src/card5.png",1); } else { card[9].picture->Create("src/cardtest.png",1); } } if (level == 3 ) { if (card[0].isCardSelected == true) { card[0].picture->Create("src/cardsm1.png",1); } else { card[0].picture->Create("src/cardback.png",1); } if (card[1].isCardSelected == true) { card[1].picture->Create("src/cardsm1.png",1); } else { card[1].picture->Create("src/cardback.png",1); } if (card[2].isCardSelected == true) { card[2].picture->Create("src/cardsm2.png",1); } else { card[2].picture->Create("src/cardback.png",1); } if (card[3].isCardSelected == true) { card[3].picture->Create("src/cardsm2.png",1); } else { card[3].picture->Create("src/cardback.png",1); } if (card[4].isCardSelected == true) { card[4].picture->Create("src/cardsm3.png",1); } else { card[4].picture->Create("src/cardback.png",1); }

CMM342  Game  Development  I                              The  Twingle  Project

Page 28: Twingle Final Project

if (card[5].isCardSelected == true) { card[5].picture->Create("src/cardsm3.png",1); } else { card[5].picture->Create("src/cardback.png",1); } if (card[6].isCardSelected == true) { card[6].picture->Create("src/cardsm4.png",1); } else { card[6].picture->Create("src/cardback.png",1); } if (card[7].isCardSelected == true) { card[7].picture->Create("src/cardsm4.png",1); } else { card[7].picture->Create("src/cardback.png",1); } if (card[8].isCardSelected == true) { card[8].picture->Create("src/cardsm5.png",1); } else { card[8].picture->Create("src/cardback.png",1); } if (card[9].isCardSelected == true) { card[9].picture->Create("src/cardsm5.png",1); } else { card[9].picture->Create("src/cardback.png",1); } if (card[10].isCardSelected == true) { card[10].picture->Create("src/cardsm6.png",1); } else { card[10].picture->Create("src/cardback.png",1); } if (card[11].isCardSelected == true) { card[11].picture->Create("src/cardsm6.png",1); } else { card[11].picture->Create("src/cardback.png",1); } if (card[12].isCardSelected == true) { card[12].picture->Create("src/cardsm7.png",1); } else { card[12].picture->Create("src/cardback.png",1); } if (card[13].isCardSelected == true) { card[13].picture->Create("src/cardsm7.png",1); } else { card[13].picture->Create("src/cardback.png",1); } if (card[14].isCardSelected == true) { card[14].picture->Create("src/cardsm8.png",1); } else { card[14].picture->Create("src/cardback.png",1); } if (card[15].isCardSelected == true) { card[15].picture->Create("src/cardsm8.png",1); } else { card[15].picture->Create("src/cardback.png",1); } } if (level == 4) { if (card[0].isCardSelected == true) { card[0].picture->Create("src/cardsm1.png",1); } else { card[0].picture->Create("src/cardback.png",1); } if (card[1].isCardSelected == true) { card[1].picture->Create("src/cardsm1.png",1); } else { card[1].picture->Create("src/cardback.png",1); } if (card[2].isCardSelected == true) { card[2].picture->Create("src/cardsm2.png",1); } else { card[2].picture->Create("src/cardback.png",1); } if (card[3].isCardSelected == true) { card[3].picture->Create("src/cardsm2.png",1); } else { card[3].picture->Create("src/cardback.png",1); } if (card[4].isCardSelected == true) { card[4].picture->Create("src/cardsm3.png",1); } else { card[4].picture->Create("src/cardback.png",1); } if (card[5].isCardSelected == true) { card[5].picture->Create("src/cardsm3.png",1); } else { card[5].picture->Create("src/cardback.png",1); } if (card[6].isCardSelected == true) { card[6].picture->Create("src/cardsm4.png",1); } else { card[6].picture->Create("src/cardback.png",1); } if (card[7].isCardSelected == true) { card[7].picture->Create("src/cardsm4.png",1); } else { card[7].picture->Create("src/cardback.png",1); } if (card[8].isCardSelected == true) { card[8].picture->Create("src/cardsm5.png",1); } else { card[8].picture->Create("src/cardback.png",1); }

CMM342  Game  Development  I                              The  Twingle  Project

Page 29: Twingle Final Project

if (card[9].isCardSelected == true) { card[9].picture->Create("src/cardsm5.png",1); } else { card[9].picture->Create("src/cardback.png",1); } if (card[10].isCardSelected == true) { card[10].picture->Create("src/cardsm6.png",1); } else { card[10].picture->Create("src/cardback.png",1); } if (card[11].isCardSelected == true) { card[11].picture->Create("src/cardsm6.png",1); } else { card[11].picture->Create("src/cardback.png",1); } if (card[12].isCardSelected == true) { card[12].picture->Create("src/cardsm7.png",1); } else { card[12].picture->Create("src/cardback.png",1); } if (card[13].isCardSelected == true) { card[13].picture->Create("src/cardsm7.png",1); } else { card[13].picture->Create("src/cardback.png",1); } if (card[14].isCardSelected == true) { card[14].picture->Create("src/cardsm8.png",1); } else { card[14].picture->Create("src/cardback.png",1); } if (card[15].isCardSelected == true) { card[15].picture->Create("src/cardsm8.png",1); } else { card[15].picture->Create("src/cardback.png",1); } if (card[16].isCardSelected == true) { card[16].picture->Create("src/cardsm9.png",1); } else { card[16].picture->Create("src/cardback.png",1); } if (card[17].isCardSelected == true) { card[17].picture->Create("src/cardsm9.png",1); } else { card[17].picture->Create("src/cardback.png",1); } if (card[18].isCardSelected == true) { card[18].picture->Create("src/cardsm10.png",1); } else { card[18].picture->Create("src/cardback.png",1); } if (card[19].isCardSelected == true) { card[19].picture->Create("src/cardsm10.png",1); } else { card[19].picture->Create("src/cardback.png",1); } if (card[20].isCardSelected == true) { card[20].picture->Create("src/cardsm11.png",1); } else { card[20].picture->Create("src/cardback.png",1); } if (card[21].isCardSelected == true) { card[21].picture->Create("src/cardsm11.png",1); } else { card[21].picture->Create("src/cardback.png",1); } if (card[22].isCardSelected == true) { card[22].picture->Create("src/cardsm12.png",1); } else { card[22].picture->Create("src/cardback.png",1); } if (card[23].isCardSelected == true) { card[23].picture->Create("src/cardsm12.png",1); } else { card[23].picture->Create("src/cardback.png",1); } }}void gameplay(int level) { if (level == 1 && Level1WasPlay == false) { cardpicture(level); Level1WasPlay = true; cardnumber = 4; for(int i = 0; i<8; i++) { printf("Start number distributing\n");rerand: int randposition = rand()%8; if (randposition != card[0].labeltest && randposition != card[1].labeltest && randposition != card[2].labeltest && randposition != card[3].labeltest

CMM342  Game  Development  I                              The  Twingle  Project

Page 30: Twingle Final Project

&& randposition != card[4].labeltest && randposition != card[5].labeltest && randposition != card[6].labeltest && randposition != card[7].labeltest) { if (randposition == 0) { card[i].picture->SetPos(35,45); } if (randposition == 1) { card[i].picture->SetPos(150,45); } if (randposition == 2) { card[i].picture->SetPos(265,45); } if (randposition == 3) { card[i].picture->SetPos(380,45); } if (randposition == 4) { card[i].picture->SetPos(35,160); } if (randposition == 5) { card[i].picture->SetPos(150,160); } if (randposition == 6) { card[i].picture->SetPos(265,160); } if (randposition == 7) { card[i].picture->SetPos(380,160); } card[i].labeltest = randposition; // Save Position Label } else { goto rerand; } } } // Level 2 if (level == 2 && Level2WasPlay == false) { cardpicture(level); Level1WasPlay = false; Level2WasPlay = true; cardnumber = 5; for(int i = 0; i<10; i++) { card[i].cardWasEliminated = false; card[i].labeltest = 549; printf("Start number distributing\n");rerand2: int randposition = rand()%10; if (randposition != card[0].labeltest && randposition != card[1].labeltest && randposition != card[2].labeltest && randposition != card[3].labeltest && randposition != card[4].labeltest && randposition != card[5].labeltest && randposition != card[6].labeltest && randposition != card[7].labeltest && randposition != card[8].labeltest && randposition != card[9].labeltest) { if (randposition == 0) { card[i].picture->SetPos(35,45); } if (randposition == 1) { card[i].picture->SetPos(121,45); } if (randposition == 2) { card[i].picture->SetPos(207,45); } if (randposition == 3) { card[i].picture->SetPos(298,45); } if (randposition == 4) { card[i].picture->SetPos(379,45); } if (randposition == 5) { card[i].picture->SetPos(35,160); } if (randposition == 6) { card[i].picture->SetPos(121,160); } if (randposition == 7) { card[i].picture->SetPos(207,160); } if (randposition == 8) { card[i].picture->SetPos(298,160); } if (randposition == 9) { card[i].picture->SetPos(379,160); } card[i].labeltest = randposition; // Save Position Label }

CMM342  Game  Development  I                              The  Twingle  Project

Page 31: Twingle Final Project

else { goto rerand2; } } } // Level 3 if (level == 3 && Level3WasPlay == false) { cardpicture(level); Level2WasPlay = false; Level3WasPlay = true; cardnumber = 8; for(int i = 0; i<16; i++) { card[i].cardWasEliminated = false; card[i].labeltest = 549; printf("Start number distributing\n");rerand3: int randposition = rand()%16; if (randposition != card[0].labeltest && randposition != card[1].labeltest && randposition != card[2].labeltest && randposition != card[3].labeltest && randposition != card[4].labeltest && randposition != card[5].labeltest && randposition != card[6].labeltest && randposition != card[7].labeltest && randposition != card[8].labeltest && randposition != card[9].labeltest && randposition != card[10].labeltest && randposition != card[11].labeltest && randposition != card[12].labeltest && randposition != card[13].labeltest && randposition != card[14].labeltest && randposition != card[15].labeltest) { if (randposition == 0) { card[i].picture->SetPos(42,60); } if (randposition == 1) { card[i].picture->SetPos(94,60); } if (randposition == 2) { card[i].picture->SetPos(146,60); } if (randposition == 3) { card[i].picture->SetPos(198,60); } if (randposition == 4) { card[i].picture->SetPos(250,60); } if (randposition == 5) { card[i].picture->SetPos(302,60); } if (randposition == 6) { card[i].picture->SetPos(354,60); } if (randposition == 7) { card[i].picture->SetPos(406,60); } if (randposition == 8) { card[i].picture->SetPos(42,155); } if (randposition == 9) { card[i].picture->SetPos(94,155); } if (randposition == 10) { card[i].picture->SetPos(146,155); } if (randposition == 11) { card[i].picture->SetPos(198,155); } if (randposition == 12) { card[i].picture->SetPos(250,155); } if (randposition == 13) { card[i].picture->SetPos(302,155); } if (randposition == 14) { card[i].picture->SetPos(354,155); } if (randposition == 15) { card[i].picture->SetPos(406,155); } card[i].labeltest = randposition; // Save Position Label } else { goto rerand3; } } }

CMM342  Game  Development  I                              The  Twingle  Project

Page 32: Twingle Final Project

// Level 4 if (level == 4 && Level4WasPlay == false) { cardpicture(level); Level3WasPlay = false; Level4WasPlay = true; cardnumber = 12; for(int i = 0; i<24; i++) { card[i].cardWasEliminated = false; card[i].labeltest = 549; printf("Start number distributing\n");rerand4: int randposition = rand()%24; if (randposition != card[0].labeltest && randposition != card[1].labeltest && randposition != card[2].labeltest && randposition != card[3].labeltest && randposition != card[4].labeltest && randposition != card[5].labeltest && randposition != card[6].labeltest && randposition != card[7].labeltest && randposition != card[8].labeltest && randposition != card[9].labeltest && randposition != card[10].labeltest && randposition != card[11].labeltest && randposition != card[12].labeltest && randposition != card[13].labeltest && randposition != card[14].labeltest && randposition != card[15].labeltest && randposition != card[16].labeltest && randposition != card[17].labeltest && randposition != card[18].labeltest && randposition != card[19].labeltest && randposition != card[20].labeltest && randposition != card[21].labeltest && randposition != card[22].labeltest && randposition != card[23].labeltest) { if (randposition == 0) { card[i].picture->SetPos(42,45); } if (randposition == 1) { card[i].picture->SetPos(94,45); } if (randposition == 2) { card[i].picture->SetPos(146,45); } if (randposition == 3) { card[i].picture->SetPos(198,45); } if (randposition == 4) { card[i].picture->SetPos(250,45); } if (randposition == 5) { card[i].picture->SetPos(302,45); } if (randposition == 6) { card[i].picture->SetPos(354,45); } if (randposition == 7) { card[i].picture->SetPos(406,45); } if (randposition == 8) { card[i].picture->SetPos(42,115); } if (randposition == 9) { card[i].picture->SetPos(94,115); } if (randposition == 10) { card[i].picture->SetPos(146,115); } if (randposition == 11) { card[i].picture->SetPos(198,115); } if (randposition == 12) { card[i].picture->SetPos(250,115); } if (randposition == 13) { card[i].picture->SetPos(302,115); } if (randposition == 14) { card[i].picture->SetPos(354,115); } if (randposition == 15) { card[i].picture->SetPos(406,115); } if (randposition == 16) { card[i].picture->SetPos(42,195); } if (randposition == 17) { card[i].picture->SetPos(94,195); } if (randposition == 18) { card[i].picture->SetPos(146,195); } if (randposition == 19) { card[i].picture->SetPos(198,195); }

CMM342  Game  Development  I                              The  Twingle  Project

Page 33: Twingle Final Project

if (randposition == 20) { card[i].picture->SetPos(250,195); } if (randposition == 21) { card[i].picture->SetPos(302,195); } if (randposition == 22) { card[i].picture->SetPos(354,195); } if (randposition == 23) { card[i].picture->SetPos(406,195); } card[i].labeltest = randposition; // Save Position Label } else { goto rerand4; } } } if (Level1WasPlay == true && live != 0) { for (int i=0; i<8; i++) { if(card[i].cardWasEliminated == false) { card[i].picture->Draw; } } } if (Level2WasPlay == true && isLevelChanged == true && live != 0) { for (int i=0; i<10; i++) { if(card[i].cardWasEliminated == false) { card[i].picture->Draw; } } } if (Level3WasPlay == true && isLevelChanged == true && live != 0) { for (int i=0; i<16; i++) { if(card[i].cardWasEliminated == false) { card[i].picture->Draw; } } } if (Level4WasPlay == true && isLevelChanged == true && live != 0) { for (int i=0; i<24; i++) { if(card[i].cardWasEliminated == false) { card[i].picture->Draw; } } }}void gamecontrol(int level) { // Level 1 Controlling if (level == 1) { gameselector->Draw; if( Input->GetKeyState(SDLK_RIGHT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN9) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(150,45); cardgameselect = 2; } else if (cardgameselect == 2) { gameselector->SetPos(265,45); cardgameselect = 3; } else if (cardgameselect == 3) { gameselector->SetPos(380,45); cardgameselect = 4; } else if (cardgameselect == 5) { gameselector->SetPos(150,160); cardgameselect = 6; } else if (cardgameselect == 6) { gameselector->SetPos(265,160); cardgameselect = 7; } else if (cardgameselect == 7) { gameselector->SetPos(380,160); cardgameselect = 8; } } else if( Input->GetKeyState(SDLK_LEFT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN7) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 2) { gameselector->SetPos(35,45); cardgameselect = 1; } else if (cardgameselect == 3) { gameselector->SetPos(150,45); cardgameselect = 2; } else if (cardgameselect == 4) { gameselector->SetPos(265,45); cardgameselect = 3; } else if (cardgameselect == 6) { gameselector->SetPos(35,160); cardgameselect = 5; } else if (cardgameselect == 7) { gameselector->SetPos(150,160); cardgameselect = 6; } else if (cardgameselect == 8) { gameselector->SetPos(265,160); cardgameselect = 7; } }

CMM342  Game  Development  I                              The  Twingle  Project

Page 34: Twingle Final Project

else if( Input->GetKeyState(SDLK_UP) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN8) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 5) { gameselector->SetPos(35,45); cardgameselect = 1; } else if (cardgameselect == 6) { gameselector->SetPos(150,45); cardgameselect = 2; } else if (cardgameselect == 7) { gameselector->SetPos(265,45); cardgameselect = 3; } else if (cardgameselect == 8) { gameselector->SetPos(380,45); cardgameselect = 4; } } else if( Input->GetKeyState(SDLK_DOWN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN6) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(35,160); cardgameselect = 5; } else if (cardgameselect == 2) { gameselector->SetPos(150,160); cardgameselect = 6; } else if (cardgameselect == 3) { gameselector->SetPos(265,160); cardgameselect = 7; } else if (cardgameselect == 4) { gameselector->SetPos(380,160); cardgameselect = 8; } } else if ( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS ) { for (int i=0; i<8; i++) { if ( gameselector->SpriteHit(card[i].picture) && card[i].cardWasEliminated == false && card[i].isCardSelected == false && selectionWasMove == true) { card[i].isCardSelected = true; cardpicture(level); if (card[i].isCardSelected == true) { numberofselectedcard++; } if (numberofselectedcard == 1) { indexselect1 = i; selectionWasMove = false; } else if (numberofselectedcard == 2) { indexselect2 = i; selectionWasMove = false; } } } if (numberofselectedcard == 2) { numberofselectedcard = 0; cardpicture(level); card[indexselect1].picture->Draw; card[indexselect2].picture->Draw; Screen->Flip( 0, 0, 1 ); SDL_framerateDelay( Fps ); Sleep(1000); printf("card 1 %d == card 2 %d\n",card[indexselect1].match,card[indexselect2].match); if (card[indexselect1].match == card[indexselect2].match) { printf("True Matching \n"); cardnumber--; card[indexselect1].cardWasEliminated = true; card[indexselect2].cardWasEliminated = true;

CMM342  Game  Development  I                              The  Twingle  Project

Page 35: Twingle Final Project

card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; } else { card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; cardpicture(level); printf("Here False Matching\n"); if(difficultmode != 1) { live--; } } } } } // End Level 1 // Level 2 Controlling if (level == 2) { gameselector->Draw; if( Input->GetKeyState(SDLK_RIGHT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN9) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(121,45); cardgameselect = 2; } else if (cardgameselect == 2) { gameselector->SetPos(207,45); cardgameselect = 3; } else if (cardgameselect == 3) { gameselector->SetPos(298,45); cardgameselect = 4; } else if (cardgameselect == 4) { gameselector->SetPos(379,45); cardgameselect = 5; } else if (cardgameselect == 6) { gameselector->SetPos(121,160); cardgameselect = 7; } else if (cardgameselect == 7) { gameselector->SetPos(207,160); cardgameselect = 8; } else if (cardgameselect == 8) { gameselector->SetPos(298,160); cardgameselect = 9; } else if (cardgameselect == 9) { gameselector->SetPos(379,160); cardgameselect = 10; } } else if( Input->GetKeyState(SDLK_LEFT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN7) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 2) { gameselector->SetPos(35,45); cardgameselect = 1; } else if (cardgameselect == 3) { gameselector->SetPos(121,45); cardgameselect = 2; } else if (cardgameselect == 4) { gameselector->SetPos(207,45); cardgameselect = 3; } else if (cardgameselect == 5) { gameselector->SetPos(298,45); cardgameselect = 4; } else if (cardgameselect == 7) { gameselector->SetPos(35,160); cardgameselect = 6; } else if (cardgameselect == 8) { gameselector->SetPos(121,160); cardgameselect = 7; } else if (cardgameselect == 9) { gameselector->SetPos(207,160); cardgameselect = 8; } else if (cardgameselect == 10) { gameselector->SetPos(298,160); cardgameselect = 9; } } else if( Input->GetKeyState(SDLK_UP) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN8) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 6) { gameselector->SetPos(35,45); cardgameselect = 1; } else if (cardgameselect == 7) { gameselector->SetPos(121,45); cardgameselect = 2; } else if (cardgameselect == 8) { gameselector->SetPos(207,45); cardgameselect = 3; } else if (cardgameselect == 9) { gameselector->SetPos(298,45); cardgameselect = 4; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 36: Twingle Final Project

else if (cardgameselect == 10) { gameselector->SetPos(379,45); cardgameselect = 5; } } else if( Input->GetKeyState(SDLK_DOWN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN6) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(35,160); cardgameselect = 6; } else if (cardgameselect == 2) { gameselector->SetPos(121,160); cardgameselect = 7; } else if (cardgameselect == 3) { gameselector->SetPos(207,160); cardgameselect = 8; } else if (cardgameselect == 4) { gameselector->SetPos(298,160); cardgameselect = 9; } else if (cardgameselect == 5) { gameselector->SetPos(379,160); cardgameselect = 10; } } else if ( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS) { for (int i=0; i<10; i++) { if ( gameselector->SpriteHit(card[i].picture) && card[i].cardWasEliminated == false && card[i].isCardSelected == false && selectionWasMove == true) { card[i].isCardSelected = true; cardpicture(level); if (card[i].isCardSelected == true) { numberofselectedcard++; } if (numberofselectedcard == 1) { indexselect1 = i; selectionWasMove = false; } else if (numberofselectedcard == 2) { indexselect2 = i; selectionWasMove = false; } } } if (numberofselectedcard == 2) { numberofselectedcard = 0; cardpicture(level); card[indexselect1].picture->Draw; card[indexselect2].picture->Draw; Screen->Flip( 0, 0, 1 ); SDL_framerateDelay( Fps ); Sleep(1000); printf("card 1 %d == card 2 %d\n",card[indexselect1].match,card[indexselect2].match); if (card[indexselect1].match == card[indexselect2].match) { printf("True Matching \n"); cardnumber--; card[indexselect1].cardWasEliminated = true; card[indexselect2].cardWasEliminated = true; card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 37: Twingle Final Project

else { card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; cardpicture(level); printf("Here False Matching\n"); if(difficultmode != 1) { live--; } } } } } // End Level 2 // Level 3 Controlling if (level == 3) { gameselector->Draw; if( Input->GetKeyState(SDLK_RIGHT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN9) == CDXKEY_PRESS ) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(94,60); cardgameselect = 2; } else if (cardgameselect == 2) { gameselector->SetPos(146,60); cardgameselect = 3; } else if (cardgameselect == 3) { gameselector->SetPos(198,60); cardgameselect = 4; } else if (cardgameselect == 4) { gameselector->SetPos(250,60); cardgameselect = 5; } else if (cardgameselect == 5) { gameselector->SetPos(302,60); cardgameselect = 6; } else if (cardgameselect == 6) { gameselector->SetPos(354,60); cardgameselect = 7; } else if (cardgameselect == 7) { gameselector->SetPos(406,60); cardgameselect = 8; } else if (cardgameselect == 9) { gameselector->SetPos(94,155); cardgameselect = 10; } else if (cardgameselect == 10) { gameselector->SetPos(146,155); cardgameselect = 11; } else if (cardgameselect == 11) { gameselector->SetPos(198,155); cardgameselect = 12; } else if (cardgameselect == 12) { gameselector->SetPos(250,155); cardgameselect = 13; } else if (cardgameselect == 13) { gameselector->SetPos(302,155); cardgameselect = 14; } else if (cardgameselect == 14) { gameselector->SetPos(354,155); cardgameselect = 15; } else if (cardgameselect == 15) { gameselector->SetPos(406,155); cardgameselect = 16; } } else if( Input->GetKeyState(SDLK_LEFT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN7) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 2) { gameselector->SetPos(42,60); cardgameselect = 1; } else if (cardgameselect == 3) { gameselector->SetPos(94,60); cardgameselect = 2; } else if (cardgameselect == 4) { gameselector->SetPos(146,60); cardgameselect = 3; } else if (cardgameselect == 5) { gameselector->SetPos(198,60); cardgameselect = 4; } else if (cardgameselect == 6) { gameselector->SetPos(250,60); cardgameselect = 5; } else if (cardgameselect == 7) { gameselector->SetPos(302,60); cardgameselect = 6; } else if (cardgameselect == 8) { gameselector->SetPos(354,60); cardgameselect = 7; } else if (cardgameselect == 10) { gameselector->SetPos(42,155); cardgameselect = 9; } else if (cardgameselect == 11) { gameselector->SetPos(94,155); cardgameselect = 10; } else if (cardgameselect == 12) { gameselector->SetPos(146,155); cardgameselect = 11; } else if (cardgameselect == 13) { gameselector->SetPos(198,155); cardgameselect = 12; } else if (cardgameselect == 14) { gameselector->SetPos(250,155); cardgameselect = 13; } else if (cardgameselect == 15) { gameselector->SetPos(302,155); cardgameselect = 14; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 38: Twingle Final Project

else if (cardgameselect == 16) { gameselector->SetPos(354,155); cardgameselect = 15; } } else if( Input->GetKeyState(SDLK_UP) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN8) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 9) { gameselector->SetPos(42,60); cardgameselect = 1; } else if (cardgameselect == 10) { gameselector->SetPos(94,60); cardgameselect = 2; } else if (cardgameselect == 11) { gameselector->SetPos(146,60); cardgameselect = 3; } else if (cardgameselect == 12) { gameselector->SetPos(198,60); cardgameselect = 4; } else if (cardgameselect == 13) { gameselector->SetPos(250,60); cardgameselect = 5; } else if (cardgameselect == 14) { gameselector->SetPos(302,60); cardgameselect = 6; } else if (cardgameselect == 15) { gameselector->SetPos(354,60); cardgameselect = 7; } else if (cardgameselect == 16) { gameselector->SetPos(406,60); cardgameselect = 8; } } else if( Input->GetKeyState(SDLK_DOWN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN6) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(42,155); cardgameselect = 9; } else if (cardgameselect == 2) { gameselector->SetPos(94,155); cardgameselect = 10; } else if (cardgameselect == 3) { gameselector->SetPos(146,155); cardgameselect = 11; } else if (cardgameselect == 4) { gameselector->SetPos(198,155); cardgameselect = 12; } else if (cardgameselect == 5) { gameselector->SetPos(250,155); cardgameselect = 13; } else if (cardgameselect == 6) { gameselector->SetPos(302,155); cardgameselect = 14; } else if (cardgameselect == 7) { gameselector->SetPos(354,155); cardgameselect = 15; } else if (cardgameselect == 8) { gameselector->SetPos(406,155); cardgameselect = 16; } } else if ( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS) { for (int i=0; i<16; i++) { if ( gameselector->SpriteHit(card[i].picture) && card[i].cardWasEliminated == false && card[i].isCardSelected == false && selectionWasMove == true) { card[i].isCardSelected = true; cardpicture(level); if (card[i].isCardSelected == true) { numberofselectedcard++; } if (numberofselectedcard == 1) { indexselect1 = i; selectionWasMove = false; } else if (numberofselectedcard == 2) { indexselect2 = i; selectionWasMove = false; } } } if (numberofselectedcard == 2) { numberofselectedcard = 0; cardpicture(level); card[indexselect1].picture->Draw; card[indexselect2].picture->Draw;

CMM342  Game  Development  I                              The  Twingle  Project

Page 39: Twingle Final Project

Screen->Flip( 0, 0, 1 ); SDL_framerateDelay( Fps ); Sleep(1000); printf("card 1 %d == card 2 %d\n",card[indexselect1].match,card[indexselect2].match); if (card[indexselect1].match == card[indexselect2].match) { printf("True Matching \n"); cardnumber--; card[indexselect1].cardWasEliminated = true; card[indexselect2].cardWasEliminated = true; card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; } else { card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; cardpicture(level); printf("Here False Matching\n"); if(difficultmode != 1) { live--; } } } } else if ( Input->GetKeyState(SDLK_1) ) { selectionWasMove = true; gameselector->SetPos(42,60); cardgameselect = 1; } else if ( Input->GetKeyState(SDLK_2) ) { selectionWasMove = true; gameselector->SetPos(94,60); cardgameselect = 2; } else if ( Input->GetKeyState(SDLK_3) ) { selectionWasMove = true; gameselector->SetPos(146,60); cardgameselect = 3; } else if ( Input->GetKeyState(SDLK_4) ) { selectionWasMove = true; gameselector->SetPos(198,60); cardgameselect = 4; } else if ( Input->GetKeyState(SDLK_5) ) { selectionWasMove = true; gameselector->SetPos(250,60); cardgameselect = 5; } else if ( Input->GetKeyState(SDLK_6) ) { selectionWasMove = true; gameselector->SetPos(302,60); cardgameselect = 6; } else if ( Input->GetKeyState(SDLK_7) ) { selectionWasMove = true; gameselector->SetPos(354,60); cardgameselect = 7; } else if ( Input->GetKeyState(SDLK_8) ) { selectionWasMove = true; gameselector->SetPos(406,60); cardgameselect = 8; } } // End Level 3 // Level 4 Controlling if (level == 4) { gameselector->Draw; if( Input->GetKeyState(SDLK_RIGHT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN9) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(94,45); cardgameselect = 2; } else if (cardgameselect == 2) { gameselector->SetPos(146,45); cardgameselect = 3; } else if (cardgameselect == 3) { gameselector->SetPos(198,45); cardgameselect = 4; } else if (cardgameselect == 4) { gameselector->SetPos(250,45); cardgameselect = 5; } else if (cardgameselect == 5) { gameselector->SetPos(302,45); cardgameselect = 6; } else if (cardgameselect == 6) { gameselector->SetPos(354,45); cardgameselect = 7; } else if (cardgameselect == 7) { gameselector->SetPos(406,45); cardgameselect = 8; } else if (cardgameselect == 9) { gameselector->SetPos(94,115); cardgameselect = 10; } else if (cardgameselect == 10) { gameselector->SetPos(146,115); cardgameselect = 11; } else if (cardgameselect == 11) { gameselector->SetPos(198,115); cardgameselect = 12; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 40: Twingle Final Project

else if (cardgameselect == 12) { gameselector->SetPos(250,115); cardgameselect = 13; } else if (cardgameselect == 13) { gameselector->SetPos(302,115); cardgameselect = 14; } else if (cardgameselect == 14) { gameselector->SetPos(354,115); cardgameselect = 15; } else if (cardgameselect == 15) { gameselector->SetPos(406,115); cardgameselect = 16; } else if (cardgameselect == 17) { gameselector->SetPos(94,195); cardgameselect = 18; } else if (cardgameselect == 18) { gameselector->SetPos(146,195); cardgameselect = 19; } else if (cardgameselect == 19) { gameselector->SetPos(198,195); cardgameselect = 20; } else if (cardgameselect == 20) { gameselector->SetPos(250,195); cardgameselect = 21; } else if (cardgameselect == 21) { gameselector->SetPos(302,195); cardgameselect = 22; } else if (cardgameselect == 22) { gameselector->SetPos(354,195); cardgameselect = 23; } else if (cardgameselect == 23) { gameselector->SetPos(406,195); cardgameselect = 24; } } else if( Input->GetKeyState(SDLK_LEFT) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN7) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 2) { gameselector->SetPos(42,45); cardgameselect = 1; } else if (cardgameselect == 3) { gameselector->SetPos(94,45); cardgameselect = 2; } else if (cardgameselect == 4) { gameselector->SetPos(146,45); cardgameselect = 3; } else if (cardgameselect == 5) { gameselector->SetPos(198,45); cardgameselect = 4; } else if (cardgameselect == 6) { gameselector->SetPos(250,45); cardgameselect = 5; } else if (cardgameselect == 7) { gameselector->SetPos(302,45); cardgameselect = 6; } else if (cardgameselect == 8) { gameselector->SetPos(354,45); cardgameselect = 7; } else if (cardgameselect == 10) { gameselector->SetPos(42,115); cardgameselect = 9; } else if (cardgameselect == 11) { gameselector->SetPos(94,115); cardgameselect = 10; } else if (cardgameselect == 12) { gameselector->SetPos(146,115); cardgameselect = 11; } else if (cardgameselect == 13) { gameselector->SetPos(198,115); cardgameselect = 12; } else if (cardgameselect == 14) { gameselector->SetPos(250,115); cardgameselect = 13; } else if (cardgameselect == 15) { gameselector->SetPos(302,115); cardgameselect = 14; } else if (cardgameselect == 16) { gameselector->SetPos(354,115); cardgameselect = 15; } else if (cardgameselect == 18) { gameselector->SetPos(42,195); cardgameselect = 17; } else if (cardgameselect == 19) { gameselector->SetPos(94,195); cardgameselect = 18; } else if (cardgameselect == 20) { gameselector->SetPos(146,195); cardgameselect = 19; } else if (cardgameselect == 21) { gameselector->SetPos(198,195); cardgameselect = 20; } else if (cardgameselect == 22) { gameselector->SetPos(250,195); cardgameselect = 21; } else if (cardgameselect == 23) { gameselector->SetPos(302,195); cardgameselect = 22; } else if (cardgameselect == 24) { gameselector->SetPos(354,195); cardgameselect = 23; } } else if( Input->GetKeyState(SDLK_UP) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN8) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 9) { gameselector->SetPos(42,45); cardgameselect = 1; } else if (cardgameselect == 10) { gameselector->SetPos(94,45); cardgameselect = 2; } else if (cardgameselect == 11) { gameselector->SetPos(146,45); cardgameselect = 3; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 41: Twingle Final Project

else if (cardgameselect == 12) { gameselector->SetPos(198,45); cardgameselect = 4; } else if (cardgameselect == 13) { gameselector->SetPos(250,45); cardgameselect = 5; } else if (cardgameselect == 14) { gameselector->SetPos(302,45); cardgameselect = 6; } else if (cardgameselect == 15) { gameselector->SetPos(354,45); cardgameselect = 7; } else if (cardgameselect == 16) { gameselector->SetPos(406,45); cardgameselect = 8; } else if (cardgameselect == 17) { gameselector->SetPos(42,115); cardgameselect = 9; } else if (cardgameselect == 18) { gameselector->SetPos(94,115); cardgameselect = 10; } else if (cardgameselect == 19) { gameselector->SetPos(146,115); cardgameselect = 11; } else if (cardgameselect == 20) { gameselector->SetPos(198,115); cardgameselect = 12; } else if (cardgameselect == 21) { gameselector->SetPos(250,115); cardgameselect = 13; } else if (cardgameselect == 22) { gameselector->SetPos(302,115); cardgameselect = 14; } else if (cardgameselect == 23) { gameselector->SetPos(354,115); cardgameselect = 15; } else if (cardgameselect == 24) { gameselector->SetPos(406,115); cardgameselect = 16; } } else if( Input->GetKeyState(SDLK_DOWN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN6) == CDXKEY_PRESS) { selectionWasMove = true; if (cardgameselect == 1) { gameselector->SetPos(42,115); cardgameselect = 9; } else if (cardgameselect == 2) { gameselector->SetPos(94,115); cardgameselect = 10; } else if (cardgameselect == 3) { gameselector->SetPos(146,115); cardgameselect = 11; } else if (cardgameselect == 4) { gameselector->SetPos(198,115); cardgameselect = 12; } else if (cardgameselect == 5) { gameselector->SetPos(250,115); cardgameselect = 13; } else if (cardgameselect == 6) { gameselector->SetPos(302,115); cardgameselect = 14; } else if (cardgameselect == 7) { gameselector->SetPos(354,115); cardgameselect = 15; } else if (cardgameselect == 8) { gameselector->SetPos(406,115); cardgameselect = 16; } else if (cardgameselect == 9) { gameselector->SetPos(42,195); cardgameselect = 17; } else if (cardgameselect == 10) { gameselector->SetPos(94,195); cardgameselect = 18; } else if (cardgameselect == 11) { gameselector->SetPos(146,195); cardgameselect = 19; } else if (cardgameselect == 12) { gameselector->SetPos(198,195); cardgameselect = 20; } else if (cardgameselect == 13) { gameselector->SetPos(250,195); cardgameselect = 21; } else if (cardgameselect == 14) { gameselector->SetPos(302,195); cardgameselect = 22; } else if (cardgameselect == 15) { gameselector->SetPos(354,195); cardgameselect = 23; } else if (cardgameselect == 16) { gameselector->SetPos(406,195); cardgameselect = 24; } } else if ( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS) { for (int i=0; i<24; i++) { if ( gameselector->SpriteHit(card[i].picture) && card[i].cardWasEliminated == false && card[i].isCardSelected == false && selectionWasMove == true) { card[i].isCardSelected = true; cardpicture(level); if (card[i].isCardSelected == true) { numberofselectedcard++; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 42: Twingle Final Project

if (numberofselectedcard == 1) { indexselect1 = i; selectionWasMove = false; } else if (numberofselectedcard == 2) { indexselect2 = i; selectionWasMove = false; } } } if (numberofselectedcard == 2) { numberofselectedcard = 0; cardpicture(level); card[indexselect1].picture->Draw; card[indexselect2].picture->Draw; Screen->Flip( 0, 0, 1 ); SDL_framerateDelay( Fps ); Sleep(1000); printf("card 1 %d == card 2 %d\n",card[indexselect1].match,card[indexselect2].match); if (card[indexselect1].match == card[indexselect2].match) { printf("True Matching \n"); cardnumber--;

card[indexselect1].cardWasEliminated = true; card[indexselect2].cardWasEliminated = true; card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; } else { card[indexselect1].isCardSelected = false; card[indexselect2].isCardSelected = false; cardpicture(level); printf("Here False Matching\n"); if(difficultmode != 1) { live--; } } } } }}void gamechangelevel(int level) { if (level == 2 && isLevelChanging == true) { if (runonce0 == false) { runonce0 = true; gamebackground2->Create("src/bg2.png",1); } if(nextbackground != 0 ) { nextbackground = nextbackground - 20;} else { nextbackground = 0; isLevelChanged = true; isLevelChanging = false; } gamebackground2->SetPos(nextbackground,0); gamebackground1->Draw; gamebackground2->Draw; if (level == 2 && isLevelChanging == false ) { printf("Here %d\n",level); nextbackground = 480; gameselector->SetPos(35,45); cardgameselect = 1; isCardPreview = true; } } if (level == 3 && isLevelChanging == true) {

CMM342  Game  Development  I                              The  Twingle  Project

Page 43: Twingle Final Project

if (runonce0 == true) { gamebackground2 = new CDXSprite(); runonce0 = false; gamebackground2->Create("src/bg3.png",1); } if(nextbackground != 0 ) { nextbackground = nextbackground - 20;} else { nextbackground = 0; isLevelChanged = true; isLevelChanging = false; } gamebackground2->SetPos(nextbackground,0); gamebackground1->Draw; gamebackground2->Draw; if (level == 3 && isLevelChanging == false ) { printf("Here %d\n",level); nextbackground = 480; gameselector->SetPos(42,60); cardgameselect = 1; isCardPreview = true; } } if (level == 4 && isLevelChanging == true) { if (runonce0 == false) { gamebackground2 = new CDXSprite(); gamebackground2->Create("src/bg4.png",1); runonce0 = true; } if(nextbackground != 0 ) { nextbackground = nextbackground - 20;} else { nextbackground = 0; isLevelChanged = true; isLevelChanging = false; } gamebackground2->SetPos(nextbackground,0); gamebackground1->Draw; gamebackground2->Draw; if (level == 4 && isLevelChanging == false ) { printf("Here %d\n",level); nextbackground = 480; gameselector->SetPos(42,45); cardgameselect = 1; isCardPreview = true;} } if (live == 0) { if (runonce2 == false) { gameresult = new CDXSprite(); if (level == 1) { gamebackground1->Create("src/bg.png",1); } else if (level == 2) { gamebackground1->Create("src/bg2.png",1); } else if (level == 3) { gamebackground1->Create("src/bg3.png",1); } else if (level == 4) { gamebackground1->Create("src/bg4.png",1); } gameresult->Create("src/gameover.jpg",1); for (int i = 0; i<24; i++) { card[i].cardWasEliminated = true; } runonce2 = true; } if(nextbackground != 0 ) { nextbackground = nextbackground - 20; } else { nextbackground = 0; isGameOver = true;} gameresult->SetPos(nextbackground,0); gamebackground1->SetPos(nextbackground-480,0); gamebackground1->Draw; gameresult->Draw; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 44: Twingle Final Project

if (level == 5) { if (runonce2 == false) { gameresult = new CDXSprite(); gameresult->Create("src/youwin.jpg",1); runonce2 = true; } if(nextbackground != 0 ) { nextbackground = nextbackground - 20; } else { nextbackground = 0; isGameOver = true; } gameresult->SetPos(nextbackground,0); gamebackground1->SetPos(nextbackground-480,0); gamebackground1->Draw; gameresult->Draw; }}void pausemenu(int level) { if( Input->GetKeyState(SDLK_DOWN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN9) == CDXKEY_PRESS) { if(pauseselect == 1) { pauseselector->SetPos(66,140); pauseselect = 2;} else if(pauseselect == 2) { pauseselector->SetPos(66,180); pauseselect = 3;} else if(pauseselect == 3) { pauseselector->SetPos(66,220); pauseselect = 4;} else if(pauseselect == 4) { pauseselector->SetPos(66,220); } } if( Input->GetKeyState(SDLK_UP) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN7) == CDXKEY_PRESS) { if(pauseselect == 1) { pauseselector->SetPos(66,100); } else if(pauseselect == 2) { pauseselector->SetPos(66,100); pauseselect = 1;} else if(pauseselect == 3) { pauseselector->SetPos(66,140); pauseselect = 2;} else if(pauseselect == 4) { pauseselector->SetPos(66,180); pauseselect = 3;} } pauseselector->Draw; if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS) { printf("Pauseselect %d\n",pauseselect); if (pauseselect == 1) { // Resume Pausing = false; } else if (pauseselect == 2) { // Options Mute if (soundplaying == true) { bgmsound->Pause("src/bgm.ogg"); soundplaying = false; } else { bgmsound->Play("src/bgm.ogg"); soundplaying = true; } } else if (pauseselect == 3) { // Restart The Level Again for (int i=0; i<24; i++) { card[i].isCardSelected = false; card[i].cardWasEliminated = false; card[i].labeltest = 549; // Make Default Number }

CMM342  Game  Development  I                              The  Twingle  Project

Page 45: Twingle Final Project

isCardPreview = true; cardgameselect = 1; if (level == 1) { Level1WasPlay = false; Pausing = false; runonce4 = false; } if (level == 2) { Level2WasPlay = false; Pausing = false; runonce4 = true; } if (level == 3) { Level3WasPlay = false; Pausing = false; runonce4 = false; } if (level == 4) { Level4WasPlay = false; Pausing = false; runonce4 = true; } } else if (pauseselect == 4) { for (int i=0; i<24; i++) { card[i].isCardSelected = false; card[i].cardWasEliminated = false; card[i].labeltest = 549; // Make Default Number } bgmsound->Play("src/bgm.ogg"); isGameReset = true; isLevelChanging = false; isLevelChanged = false; soundplaying = true; Level1WasPlay = false; Level2WasPlay = false; Level3WasPlay = false; Level4WasPlay = false; menuWasSelected = false; selectionWasMove = false; isDifficultywasSelect = false; enterrelease = false; live = 10;

CMM342  Game  Development  I                              The  Twingle  Project

Page 46: Twingle Final Project

cardgameselect = 1; isCardPreview = true; switch (level){ case 1: runonce0 = false; runonce4 = false; break; case 2: runonce0 = false; runonce4 = true; break; case 3: runonce0 = true; runonce4 = false; break; case 4: runonce0 = false; runonce4 = true; break; } runonce1 = false; runonce2 = false; nextbackground = 480; if (isGameOver == true || level == 5) { runonce3 = true; gamebackground1->SetPos(0,0); } else { runonce3 = false; } isGameOver = false; Pausing = false; } } // End Button}void livecontrol() { for (int i=0; i<live; i++) { livehearts[i].hearts->Draw; }}void cardpreview() { if (level == 1 && isCardPreview == true) { if (runonce4 == false) { runonce4 = true; cardpicture(level); } for (int i = 0; i<8; i++) { card[i].isCardSelected = true; } previewdelay++; if (previewdelay == 60) { for (int i = 0; i<8; i++) { card[i].isCardSelected = false; } cardpicture(level); isCardPreview = false; previewdelay = 0; } } else if (level == 2 && isCardPreview == true) { if (runonce4 == true) { runonce4 = false; cardpicture(level); } for (int i = 0; i<10; i++) { card[i].isCardSelected = true; } previewdelay++; if (previewdelay == 60) { for (int i = 0; i<10; i++) { card[i].isCardSelected = false; } cardpicture(level); isCardPreview = false; previewdelay = 0; } } else if (level == 3 && isCardPreview == true) {

CMM342  Game  Development  I                              The  Twingle  Project

Page 47: Twingle Final Project

if (runonce4 == false) { runonce4 = true; cardpicture(level); } for (int i = 0; i<16; i++) { card[i].isCardSelected = true; } previewdelay++; if (previewdelay == 100) { for (int i = 0; i<16; i++) { card[i].isCardSelected = false; } cardpicture(level); isCardPreview = false; previewdelay = 0; } } else if (level == 4 && isCardPreview == true) { if (runonce4 == true) { runonce4 = false; cardpicture(level); } for (int i = 0; i<24; i++) { card[i].isCardSelected = true; } previewdelay++; if (previewdelay == 150) { for (int i = 0; i<24; i++) { card[i].isCardSelected = false; } cardpicture(level); isCardPreview = false; previewdelay = 0; } }}void gamedifficult() { difficultselect->Draw; difficultselector->Draw; if( Input->GetKeyState(SDLK_DOWN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN6) == CDXKEY_PRESS ) { if (difficultmode == 1) { difficultselector->SetPos(235,103); difficultmode = 2; } else if (difficultmode == 2) { difficultselector->SetPos(235,143); difficultmode = 3; } else if (difficultmode == 3) { difficultselector->SetPos(235,143); } } if( Input->GetKeyState(SDLK_UP) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN8) == CDXKEY_PRESS) { if (difficultmode == 1) { difficultselector->SetPos(235,63); } else if (difficultmode == 2) { difficultselector->SetPos(235,63); difficultmode = 1; } else if (difficultmode == 3) { difficultselector->SetPos(235,103); difficultmode = 2; } } if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS) { enterpress = true; } if(enterpress == true) { if ( Input->GetKeyState(SDLK_x) == CDXKEY_RELEASE || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_RELEASE) { enterrelease = true; } if ( enterrelease == true ) { if ( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN2) == CDXKEY_PRESS ) isDifficultywasSelect = true; }

CMM342  Game  Development  I                              The  Twingle  Project

Page 48: Twingle Final Project

}}// ------------------------------------------------------------------// cdx_Init - handles initialization of the CDX objects// ------------------------------------------------------------------BOOL cdx_Init(){ Screen = new CDXScreen(); // Memory Allocation Screen->Create( ); Screen->CreateWindowed( 480, 272, 32, SDL_DOUBLEBUF | SDL_HWSURFACE | SDL_INIT_TIMER );

Input = new CDXInput( ); Input->Create( );

Fps = new FPSmanager( ); SDL_initFramerate( Fps ); SDL_setFramerate( Fps, 30 );

// TODO: Initialize your own CDX objects here (Your Coding Here) // Time Attaching time(&start);

gamebackground2 = new CDXSprite(); gamebackground1 = new CDXSprite(); company_logo = new CDXSprite();

menu = new CDXSprite(); menu->Create("src/menu.png",1);

pause = new CDXSprite(); pause->Create("src/pause.jpg",1);

pauseselector = new CDXSprite(); pauseselector->Create("src/pauseselector.png",1); pauseselector->SetPos(66,100); bgmsound = new CDXSnd(); bgmsound->Create(); bgmsound->Play("src/bgm.ogg"); selector = new CDXSprite(); selector->Create("src/selector.png",1); selector->SetPos(190,180);

CMM342  Game  Development  I                              The  Twingle  Project

Page 49: Twingle Final Project

gameselector = new CDXSprite(); gameselector->Create("src/gameselector.png",1); gameselector->SetPos(35,45);

gameover = new CDXSprite(); gameover->Create("src/gameover.jpg",1);

difficultselect = new CDXSprite(); difficultselect->Create("src/difficulty.jpg",1);

difficultselector = new CDXSprite(); difficultselector->Create("src/pauseselector.png",1); difficultselector->SetPos(235,63);

instruction = new CDXSprite(); instruction->Create("src/instruction.jpg",1);

credit = new CDXSprite(); credit->Create("src/credit.jpg",1);

creditcontent = new CDXSprite(); creditcontent->Create("src/creditcontent.png",1); creditcontent->SetPos(50,80);

for (int i=0; i<24; i++) { card[i].picture = new CDXSprite(); card[i].isCardSelected = false; card[i].cardWasEliminated = false; card[i].labeltest = 549; // Make Default Number } for (int i=0; i<10; i++) { livehearts[i].hearts = new CDXSprite(); livehearts[i].hearts->Create("src/live.png",1); } livehearts[9].hearts->SetPos(210,3); livehearts[8].hearts->SetPos(237,3); livehearts[7].hearts->SetPos(264,3); livehearts[6].hearts->SetPos(291,3); livehearts[5].hearts->SetPos(318,3); livehearts[4].hearts->SetPos(345,3); livehearts[3].hearts->SetPos(372,3); livehearts[2].hearts->SetPos(399,3);

CMM342  Game  Development  I                              The  Twingle  Project

Page 50: Twingle Final Project

livehearts[1].hearts->SetPos(426,3); livehearts[0].hearts->SetPos(453,3);

card[0].match = 1; card[1].match = 1; card[2].match = 2; card[3].match = 2; card[4].match = 3; card[5].match = 3; card[6].match = 4; card[7].match = 4; card[8].match = 5; card[9].match = 5; card[10].match = 6; card[11].match = 6; card[12].match = 7; card[13].match = 7; card[14].match = 8; card[15].match = 8; card[16].match = 9; card[17].match = 9; card[18].match = 10; card[19].match = 10; card[20].match = 11; card[21].match = 11; card[22].match = 12; card[23].match = 12; return TRUE;}// ------------------------------------------------------------------// cdx_DeInit - handles cleanup of CDX objects// ------------------------------------------------------------------void cdx_DeInit( void ){ // TODO: Destroy your CDX objects here for (int i=0; i<24; i++) { SAFEDELETE(card[i].picture); } SAFEDELETE(pause); SAFEDELETE(pauseselector); SAFEDELETE(gameover); SAFEDELETE(difficultselect); SAFEDELETE(difficultselector);

CMM342  Game  Development  I                              The  Twingle  Project

Page 51: Twingle Final Project

SAFEDELETE(instruction); SAFEDELETE(credit); SAFEDELETE(creditcontent); SAFEDELETE(gameselector); SAFEDELETE(selector); SAFEDELETE(bgmsound); SAFEDELETE(menu); SAFEDELETE(gamebackground1); SAFEDELETE(gamebackground2); SAFEDELETE( Fps ); SAFEDELETE( Input ); SAFEDELETE( Screen );}// ------------------------------------------------------------------// cdx_DoFrame - performs drawing of the current frame// ------------------------------------------------------------------void cdx_DoFrame() { Input->Update( ); //Screen->GetBackEx()->Fill(0); // วาดหน้าจอดำๆ ถ้าอยากเปลี่ยนก็เปลี่ยน Fill(0) => x

// TODO: Add code to draw your objects during each frame // Timing Start time(&end); second = difftime(end,start); introduction(7-second);

if (isIntroductionWasEnd == true && menuWasSelected == false){ gamemenuselection(); } if (isIntroductionWasEnd == true && menuWasSelected == true) { if (Pausing == true || Input->GetKeyState(SDLK_RETURN) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN11) == CDXKEY_PRESS) { Pausing = true; pause->Draw; pausemenu(level); } } if (isGameReset == true) { level = 1; isGameReset = false; } // Must be level reset here if (menuWasSelected == true && Pausing == false) { gamechangelevel(level); if (menuselect == 2 && isGameOver == false && isDifficultywasSelect == false) { gamedifficult(); } if (menuselect == 2 && isGameOver == false && isDifficultywasSelect == true) { // GameStart

CMM342  Game  Development  I                              The  Twingle  Project

Page 52: Twingle Final Project

if (level == 1) { if (runonce3 == true) { gamebackground1->Create("src/bg.png",1); runonce3 = false; } gamebackground1->SetAlpha(alphapercentage); gamebackground1->Draw; if (level == 1 && alphapercentage != 255) { alphapercentage = alphapercentage+15; } else { alphapercentage = 255; if (difficultmode != 1) { livecontrol(); } cardpreview(); gameplay(level); if (isCardPreview == false) { gamecontrol(level); if (cardnumber == 0 && Level1WasPlay == true) { isLevelChanging = true; level = 2; if (difficultmode == 2) { live = live + 3; if (live > 10) { live = 10; } } if (difficultmode == 3) { live++; if (live > 10) { live = 10; } } } } } } // End Level 1 if (level == 2 && isLevelChanged == true) { if (runonce1 == false) { gamebackground1->Create("src/bg2.png",1); runonce1 = true; } gamebackground1->Draw; if (difficultmode != 1) { livecontrol(); } cardpreview(); gameplay(level); if (isCardPreview == false) { gamecontrol(level); if (cardnumber == 0 && Level2WasPlay == true) { isLevelChanged = false; isLevelChanging = true; level = 3; if (difficultmode == 2) { live = live + 3; if (live > 10) { live = 10; } } if (difficultmode == 3) { live++; if (live > 10) { live = 10; } } } } } // End Level 2 if (level == 3 && isLevelChanged == true) { if (runonce1 == true) { gamebackground1->Create("src/bg3.png",1); runonce1 = false; } gamebackground1->Draw; if (difficultmode != 1) { livecontrol(); }

CMM342  Game  Development  I                              The  Twingle  Project

Page 53: Twingle Final Project

cardpreview(); gameplay(level); if (isCardPreview == false) { gamecontrol(level); if (cardnumber == 0 && Level3WasPlay == true) { isLevelChanged = false; isLevelChanging = true; level = 4; if (difficultmode == 2) { live = live + 3; if (live > 10) { live = 10; } } if (difficultmode == 3) { live++; if (live > 10) { live = 10; } } } } } // End Level 3 if (level == 4 && isLevelChanged == true) { if (runonce1 == false) { gamebackground1->Create("src/bg4.png",1); runonce1 = true; } gamebackground1->Draw; if (difficultmode != 1) { livecontrol(); } cardpreview(); gameplay(level); if (isCardPreview == false) { gamecontrol(level); if (cardnumber == 0 && Level4WasPlay == true) { isLevelChanged = false; isLevelChanging = true; level = 5; } } } // End Level 4 } // How To Play if (menuselect == 1 && menuWasSelected == true) { instruction->Draw; if (Input->GetKeyState(SDLK_o) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN1) == CDXKEY_PRESS) { menuWasSelected = false;} } // Credit if (menuselect == 3 && menuWasSelected == true) { credit->Draw; creditcontent->Draw; creditdelay++; if (creditdelay > 50 && abs(creditcontent->GetPosY()) <= 380) { creditcontent->SetPos(creditcontent->GetPosX(),creditcontent->GetPosY()-1); } else if ( creditdelay > 50 ) { creditcontent->SetPos(creditcontent->GetPosX(),creditcontent->GetPosY()); } if (Input->GetKeyState(SDLK_o) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN1) == CDXKEY_PRESS) { menuWasSelected = false; creditcontent->SetPos(50,80); creditdelay = 0;} } }

CMM342  Game  Development  I                              The  Twingle  Project

Page 54: Twingle Final Project

Screen->Flip( 0, 0, 1 ); SDL_framerateDelay( Fps ); //}}

int main( int argc, char* args[] ) {#ifdef _PSP

#ifndef NDEBUG pspDebugScreenInit( ); #endif

SetupCallbacks( );#endif

cdx_Init();

while(1) {#ifdef WIN32 if( Input->GetKeyState(SDLK_ESCAPE) ) break;#endif cdx_DoFrame(); }

cdx_DeInit();

return 0;}

CMM342  Game  Development  I                              The  Twingle  Project