لقد تعلمت هذه التقنية العام الماضي ولم أكتبها بعد. الآن أخذت الوقت الكافي لكتابة لعبة Tetris.
لعبة جديدة بسيطة ، توقف مؤقت ، متابعة ، وظيفة النقاط. إنه يدرك ببساطة الوظائف الروسية الكلاسيكية.
لن أقدمها بعد الآن. إذا كنت مهتمًا ، فقم بتشغيلها بنفسك ونشر صورة لاحقًا.
شفرة:
package cn.hncu ؛ import java.awt.color ؛ استيراد java.awt.font ؛ استيراد java.awt.graphics ؛ استيراد java.awt.event.actionevent ؛ import java.awt.event.action javax.swing.jmenu ؛ استيراد javax.swing.jmenubar ؛ استيراد javax.swing.jmenuitem ؛ استيراد javax.swing.joptionpane ؛ استيراد javax.swing.jpanel ؛ javax.swing.swer ؛ public class tetris تمتد jframe te.setVisible (صحيح) ؛ // إذا قمت بإضافة مربع تحرير إلى الواجهة التي ستستفيد من التركيز ، فأنت بحاجة إلى استخدام الكود التالي //te.requestfocus(true) ؛//let الحصول على تركيز لوحة اللعبة-الحصول على لوحة المفاتيح tetrispanel tp ؛ jmenuitem itempause ؛ jmenuitem itemContinue ؛ tetris العامة () {this.setDefaultCloseOperation (exit_on_close) ؛ this.setLocation (700 ، 200) ؛ this.setsize (220 ، 275) ؛ this.setResible (false) ؛ tp = tetrispanel جديد () ؛ this.getContentPane (). add (tp) ؛ // إضافة قائمة jmenubar menubar = new jmenubar () ؛ this.setjmenubar (menubar) ؛ Jmenu menugame = New Jmenu ("Game") ؛ menubar.add (menugame) ؛ jmenuitem itemNew = New JMenuitem ("لعبة جديدة") ؛ itemNew.SetActionCommand ("New") ؛ itempause = new jmenuitem ("Pause") ؛ itempause.setActionCommand ("توقف مؤقت") ؛ itemContinue = New JMenuitem ("متابعة") ؛ itemContinue.setActionCommand ("متابعة") ؛ itemContinue.setEnabled (false) ؛ menugame.add (itemNew) ؛ menugame.add (itempause) ؛ menugame.add (itemContinue) ؛ menulistener menulistener = new menulistener () ؛ itemNew.addActionListener (menulistener) ؛ itempause.addActionListener (menulistener) ؛ itemContinue.AddActionListener (menulistener) ؛ // دع JFRAME بالكامل يضيف لوحة المفاتيح الاستماع إلى this.addkeylistener (tp.listener) ؛ } class menulistener تنفذ ActionListener {Override public void actionperformed (ActionEvent e) {// play new game if ( } if ( itemContinue.setEnabled (true) ؛ itempause.setEnabled (false) ؛ } if ( itemContinue.setEnabled (false) ؛ itempause.setEnabled (true) ؛ }}} مؤقت مؤقت ؛ يمتد فئة tetrispanel jpanel {// شكل المربع: // يمثل البعد الأول نوع الكتلة (بما في ذلك 7 أنواع: s ، z ، l ، j ، i ، o ، t). = new int [] [] [] { / * * template { {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,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,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،. {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 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0}} ، // s {0 ، 0 ، 1 ، 1 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، 1 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0}} ، 1 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} 1 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 0 ، 0 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، // o {{1 ، 1 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 1 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 1 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ،} private int bludtype ؛ // block type private int turtstate ؛ // state state private int x ؛ // block position x- column column number private int y ؛ // block position y-row position-row number private int map [] = new int [13] ؛ لمنع الحدود المتقاطعة ، يتم فتح المصفوفة إلى: 13 عمودًا و 23 صفًا تأخيرًا خاصًا = 1000 ؛ مستمع TimerKeyLister العام = جديد timerKeyLister () ؛ Private int Score = 0 ؛ // Score Public Tetrispanel () {newGame () ؛ NextBlock () ؛ // Timer = Timer جديد (تأخير ، مستمع) ؛ //timer.start () ؛ } public void newGame () {bstorttype = (int) (Math.Random ()*1000) ٪ 7 ؛ TurnState = (int) (Math.Random ()*1000) ٪ 4 ؛ x = 4 ؛ y = 0 ؛ لـ (int i = 0 ؛ i <12 ؛ i ++) {// line for (int j = 0 ؛ j <21 ؛ j ++) {// walking if (i == 0 || i == 11) {// 3 IS الشبكة من خريطة الحدود الواجهة [i] = 3 ؛ }} خريطة [i] [21] = 3 ؛ // 3 هي شبكة الحدود الواجهة} if (timer! = null) {timer.stop () ؛ } التأخير = 1000 ؛ Timer = Timer جديد (تأخير ، مستمع) ؛ Timer.Start () ؛ } private void nextBlock () {bstorttype = (int) (Math.Random ()*1000) ٪ 7 ؛ TurnState = (int) (Math.Random ()*1000) ٪ 4 ؛ x = 4 ؛ y = 0 ؛ // game over if (crash (x ، y ، blocktype ، turnstate) == 0) {timer.stop () ؛ int Option = joptionpane.showConfirmDialog (هذا ، "اللعبة أكثر من! ، هل ما زلت تجرؤ على المجيء ...") ؛ if (Option == joptionpane.ok_option) {newGame () ؛ } if if (Option == joptionpane.no_option) {system.exit (0) ؛ }}} private void down () {if (crash (x ، y+1 ، blocttype ، turnstate) == 0) {// لاحظ أن y+1 يتم استخدامه هنا لتحديد ما إذا كان الموضع المقابل في الخريطة عبارة عن كتلة أو إطار مكدسة بعد أن يتم إسقاط الكتلة بواسطة مربع واحد ؛ // احفظ معلومات الكتلة الحالية على الخريطة التالية () ؛ } آخر {y ++ ؛ } repaint () ؛ } private void left () {if (x> = 0) {x -= crash (x -1 ، y ، sbanttype ، turnstate) ؛ } repaint () ؛ } private void right () {if (x <8) {x += crash (x +1 ، y ، sbitntype ، turnstate) ؛ } repaint () ؛ } private void truck () {if (crash (x ، y ، blocktype ، (turnstate+1) ٪ 4) == 1) {turnstate = (turnstate+1) ٪ 4 ؛ } repaint () ؛ } private void add (int x ، int y ، int int bludtype ، int turnstate) {for (int a = 0 ؛ a <4 ؛ a ++) {for (int b = 0 ؛ b <4 ؛ b ++) {if (الأشكال [الحظر] [turnstate] [a*4+b] == 1) {map [x+1] [y+a] = 1 ؛ }}} trydelline () ؛ } // القضاء على void private trydelline () {for (int b = 0 ؛ b <21 ؛ b ++) {int c = 1 ؛ لـ (int a = 0 ؛ a <12 ؛ a ++) {c & = map [a] [b] ؛ all هي 1 ، نتيجة c هي 1} إذا (c == 1) {// هناك سطر يحتاج إلى القضاء عليه // خريطة [E] [D-1] ؛ }} // إضافة نقاط نقاط += 100 ؛ تأخير /=1.05 ؛ Timer.SetDelay (Delay) ؛ }}} // مثال على المعلمة: 4،3،2،3 // الحكم على ما إذا كان هناك تصادم تصادم خاص int (int x ، int y ، int inctype ، int turnstate) {for (int a = 0 ؛ خريطة [x+b+1] [y+a] == 1) || // (الأشكال [الحظر] [turnstate] [a*4+b] == 1 && map [x+b+1] 0. super.paint (g) ؛ // القضاء على efterimage g.setColor (لون جديد (153،51،205)) ؛ // ارسم الكتلة الحالية لـ (int j = 0 ؛ j <16 ؛ j ++) {if (الأشكال [الحظر] [turnstate] [j] == 1) {g.fillRect ((j ٪ 4+x+1)*10 ، (j/4+y)*10 ، 10 ، 10) ؛ G.SetColor (color.cyan) ؛ G.DrawRect ((J ٪ 4+x+1)*10 ، (j/4+y)*10 ، 10 ، 10) ؛ G.SetColor (لون جديد (153،51،205)) ؛ }} // ارسم إطار الواجهة وكتل المكدس --- الخريطة بأكملها G.SetColor (color.red) ؛ لـ (int i = 0 ؛ i <12 ؛ i ++) {// walk for (int j = 0 ؛ j <22 ؛ j ++) {// walking if (map [i] == 3) {g.drawRect (i*10 ، j*10 ، 10 ، 10 ، 10) ؛ } آخر إذا (خريطة [i] [j] == 1) {g.fillRect (i*10 ، j*10 ، 10 ، 10) ؛ G.SetColor (color.green) ؛ G.DrawRect (I*10 ، J*10 ، 10 ، 10) ؛ G.SetColor (color.red) ؛ }}} // إظهار النتيجة ، والتخطيط جميل ، أضف شيئًا إلى الواجهة // ارسم الجزء الأيمن من المنطقة المربعة G.SetColor (color.red) ؛ G.SetFont (خط جديد ("aa" ، font.bold ، 11)) ؛ G.DrawString ("Score =" + Score ، 130 ، 20) ؛ G.SetFont (خط جديد ("aa" ، font.plain ، 13)) ؛ G.SetColor (color.blue) ؛ G.DrawString ("رفض الألعاب المقرصنة" ، 125 ، 70) ؛ G.DrawString ("كن حذرًا من الحماية الذاتية" ، 125 ، 90) ؛ G.DrawString ("احذر من الخداع." ، 125 ، 110) ؛ G.DrawString ("اللعبة المعتدلة جيدة للدماغ" ، 125 ، 130) ؛ G.DrawString ("Add to Play ضار للجسم." ، 125 ، 150) ؛ G.DrawString ("وقت الجدول بشكل معقول" ، 125 ، 170) ؛ G.DrawString ("استمتع بحياة صحية." ، 125 ، 190) ؛ } class timerKeyLister يمتد KeyAdapter تنفذ ActionListener {Override public void actionperformed (ActionEvent e) {down () ؛ } Override public void keypressed (keyevent e) {switch ( استراحة؛ case keyevent.vk_left: left () ؛ break ؛ case keyevent.vk_right: right () ؛ break ؛ case keyevent.vk_up: turn () ؛ break ؛ case keyevent.vk_f1: plug () ؛ case keyevent.vk_f2: time () ؛ }} public void plug () {score+= 100 ؛ } وقت الفراغ العام () {delay = 1000 ؛ Timer.SetDelay (Delay) ؛ }}}واجهة التشغيل:
لمزيد من الألعاب إثارة ، يرجى الرجوع إلى الموضوع الخاص "ألعاب Java Classic"
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.