انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: یه بازی تکراری !! این رو ببینید و نظر بدید  (دفعات بازدید: 7371 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
سلام
من این بازی رو با پایتون نوشتم
انصافا خیلی گیر ندید بار اولم بود  :P
لطفا نظرات سازنده تون رو راجع به کد هاش بگید
#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys
from PyQt4 import QtCore, QtGui


class gameButton(QtGui.QPushButton):
    def __init__(self, parent=None):
        QtGui.QPushButton.__init__(self, parent)
        self.po = [] #mahdavi: we dont need it :) it was dreate automaticly when it used in gamepad class
       
       
    def findmove(self):
        self.moveable = []
#        temp = widget.game.freespace
        row1 = widget.game.freespace[0] - 1
        row2 = widget.game.freespace[0] + 1
        column1 = widget.game.freespace[1] - 1
        column2 = widget.game.freespace[1] + 1
             
        if row1 > -1 :
            self.moveable.append([row1, widget.game.freespace[1]])
        if column1 > -1:
            self.moveable.append([widget.game.freespace[0], column1])
        if row2 < 4 :
            self.moveable.append([row2, widget.game.freespace[1]])
        if column2 < 4:
            self.moveable.append([widget.game.freespace[0], column2])
   
    def moving(self):
        self.findmove()
               
        if self.po in self.moveable:
#            print self.moveable
            temp = widget.game.freespace
            widget.game.grid.addWidget(widget.game.buttons[self.po[0]][ self.po[1]], widget.game.freespace[0], widget.game.freespace[1])
            widget.game.freespace = self.po
            widget.game.buttons[temp[0]][temp[1]]= widget.game.buttons[self.po[0]][ self.po[1]]
            self.po = temp
            self.findmove()
#            print "free is: ", widget.game.freespace
#            print "move is: ",self.moveable
           


class gamePade(QtGui.QWidget):
    def __init__(self, parent=None):
        self.row = int()
        self.column = int()       
        self.buttons = []
        self.grid = QtGui.QGridLayout()
        num = 1
       
       
        QtGui.QWidget.__init__(self, parent)
        for row in range(4):
            self.buttons.append([])
            for column in range(4):
#                if row != 3 or column != 3:                   
                    self.buttons[row].append(gameButton())
                    self.buttons[row][column].setFont(QtGui.QFont("Tahoma", 30, QtGui.QFont.Bold))
                    self.buttons[row][column].po = [row, column]
                    self.grid.addWidget(self.buttons[row][column], row, column)
                    self.buttons[row][column].setText(num.__str__())
                    num = num + 1
                    self.connect(self.buttons[row][column], QtCore.SIGNAL("clicked()"), self.buttons[row][column].moving)
               
        self.buttons[3][3].hide()
        self.freespace = [3, 3]
       
       
        layout = QtGui.QVBoxLayout()
        layout.addLayout(self.grid)#mahdavi: grid is a layout and NOT a widget
        self.setLayout(layout)
       
       
    def k(self):
        pass


class gameWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.game = gamePade()
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.game)
        self.setLayout(layout)

    def findmoveable(self):
        self.moveable = []
        temp = placeButton()
        row1 = temp.row - 1
        row2 = temp.row + 1
        column1 = temp.column - 1
        column2 = temp.column + 1
             
        if row1 > -1 :
            if column1 > -1:
                self.moveable.append(self.buttonpanel[row1][column1])
            if column2 < 4:
                self.moveable.append(self.buttonpanel[row1][column2])
        if row2 < 4 :
            if column1 > -1:
                self.moveable.append(self.buttonpanel[row2][column1])
            if column2 < 4:
                self.moveable.append(self.buttonpanel[row2][column2])
        return self.moveable
       
                     
app = QtGui.QApplication(sys.argv)
widget = gameWidget()
widget.show()
#w2 = gamePade()
#w2.show()
sys.exit(app.exec_())
یا علی

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #1 : 09 شهریور 1388، 10:13 ق‌ظ »
--همین جوری بدون هیچ علتی حذف شد--
یا علی

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #2 : 09 شهریور 1388، 04:38 ب‌ظ »
جالبه.  :) برای شروع خوبه.
من که Qt بلد نیستم. ولی indent هات یه خورده نامنظم بود. ;D یعنی بعضی‌جاها 4 تا فاصله هست بعضی جاها یه دونه!

آفلاین ناربه

  • ناظر انجمن
  • *
  • ارسال: 2033
  • جنسیت : پسر
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #3 : 09 شهریور 1388، 04:44 ب‌ظ »
چنین بازی ای تو لینوکس ندیده بودم. خیلی باحاله. من خیلی خوشم اومد. ولی اگه روش کار کنید خیلی خوب میشه. خوبیش اینه که با Keyboard هم میشه بازی کرد.
ولی وقتی باز میکنیم کاری کنید که به صورت Random باشه. یا تو منو یه گزینه Add کنید که هر بار Randomize کنه.
من Support اش میکنم  :)

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر ب&#
« پاسخ #4 : 09 شهریور 1388، 06:20 ب‌ظ »
جالبه.  :) برای شروع خوبه.
من که Qt بلد نیستم. ولی indent هات یه خورده نامنظم بود. ;D یعنی بعضی‌جاها 4 تا فاصله هست بعضی جاها یه دونه!
قبول دارم بی نظمه و حتی به خاطر همین بی نظمیش دوباره نوشتمش ولی نتونستم کلاس ها رو جوری تنظیم کنم که منظم تر بشه
ولی اونجا هایی که فقط یه فاصله داره یه کامنت هست و کد اصلی نیست
اما چیزی که درش گیر کردم و نتونستم راهی براش پیدا کنم دکمه سطر و ستون آخر موقع ایجاد تمام دکمه هاست همون دکمه ای که در واقع نباید وجود داشته باشه (در حالت 4*4 دکمه شماره 16)

چنین بازی ای تو لینوکس ندیده بودم. خیلی باحاله. من خیلی خوشم اومد. ولی اگه روش کار کنید خیلی خوب میشه. خوبیش اینه که با Keyboard هم میشه بازی کرد.
ولی وقتی باز میکنیم کاری کنید که به صورت Random باشه. یا تو منو یه گزینه Add کنید که هر بار Randomize کنه.
من Support اش میکنم  :)
یه بازی توی کی دی ای دیدم که اینطوری بود البته فقط به صورت ویدگت روی دسکتاپ قرار می گرفت با اینکه خیلی شیک تر از این بود
نکته دیگه اینکه قصد داشتم حالت تصادفی رو ایجاد کنم ولی توابع اون رو بلد نبودم یه ایثارگر پیدا بشه این کار رو انجام بده همه بازی کناش دعاش می کنن
در مورد کار کردن با صفحه کلید هم به صورت اتفاقی این طوری شده و من قصد استفاده از صفحه کلید رو نداشتم برای همین هم هست که اینقدر بی نظمه ولی ایده خوبیه روش کار می کنم گزینه های دیگه ای هم مثل انتخاب تعداد سطر و ستون توسط بازی کن هم مد نظرم بوده برای همین یه کلاس برای دکمه طراحی کرده ام اما حوصله ش پیدا نشد
این برنامه خیلی کار داره تا بهش بشه گفت بازی
« آخرین ویرایش: 09 شهریور 1388، 06:25 ب‌ظ توسط سید حمید مهدوی »
یا علی

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #5 : 09 شهریور 1388، 08:50 ب‌ظ »
من رندمش رو نوشتم. به تابع سازنده کلاس gamePade یه آرگومان shuffle اضافه کردم که همون اول بازی رندم میکنه(در واقع بر می‌زنه) اما اینکه وسط بازی هم بشه این کارو کرد، نمی‌دونم چون با Qt آشنا نیستم. خودتون باید اضافه کنید. از تابع shuffle توی ماژول random باید استفاده بشه، این تابع یه لیست معمولی(تک‌بعدی) رو بر می‌زنه(ترتیب اعضاءش رو بصورت تصادفی تغییر میده). ولی اگه یه جدول(لیست دو بعدی) بهش بدید فقط ترتیب سطرهاش رو تغییر میده. برای همین من اون لیست 4x4 رو به یه لیست با طول تک‌بعدی با طول 16 تبدیل کردم، بعد بر زدم، بعد دوباره به لیست 4x4 تبدیل کردم.
#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys, random
from PyQt4 import QtCore, QtGui


class gameButton(QtGui.QPushButton):
    def __init__(self, parent=None):
        QtGui.QPushButton.__init__(self, parent)
        self.po = [] #mahdavi: we dont need it :) it was dreate automaticly when it used in gamepad class
       
       
    def findmove(self):
        self.moveable = []
#        temp = widget.game.freespace
        row1 = widget.game.freespace[0] - 1
        row2 = widget.game.freespace[0] + 1
        column1 = widget.game.freespace[1] - 1
        column2 = widget.game.freespace[1] + 1
             
        if row1 > -1 :
            self.moveable.append([row1, widget.game.freespace[1]])
        if column1 > -1:
            self.moveable.append([widget.game.freespace[0], column1])
        if row2 < 4 :
            self.moveable.append([row2, widget.game.freespace[1]])
        if column2 < 4:
            self.moveable.append([widget.game.freespace[0], column2])
   
    def moving(self):
        self.findmove()
               
        if self.po in self.moveable:
#            print self.moveable
            temp = widget.game.freespace
            widget.game.grid.addWidget(widget.game.buttons[self.po[0]][ self.po[1]], widget.game.freespace[0], widget.game.freespace[1])
            widget.game.freespace = self.po
            widget.game.buttons[temp[0]][temp[1]]= widget.game.buttons[self.po[0]][ self.po[1]]
            self.po = temp
            self.findmove()
#            print "free is: ", widget.game.freespace
#            print "move is: ",self.moveable
           


class gamePade(QtGui.QWidget):
    def __init__(self, parent=None, shuffle=True):
        self.row = int()
        self.column = int()       
        self.buttons = []
        self.grid = QtGui.QGridLayout()
        num = 1
       

        blist = []
       
        QtGui.QWidget.__init__(self, parent)
        for row in range(4):
            for column in range(4):
#                if row != 3 or column != 3:
                    b = gameButton()
                    b.setFont(QtGui.QFont("Tahoma", 30, QtGui.QFont.Bold))
                    self.connect(b, QtCore.SIGNAL("clicked()"), b.moving)
                    b.num = row*4 + column + 1
                    b.setText(str(b.num))
                    blist.append(b)
        if shuffle:
            random.shuffle(blist)
        self.buttons = [[None for i in range(4)] for i in range(4)]
        for i in range(16):
            b = blist[i]
            row = i/4
            column = i%4
            b.po = [row, column]
            if b.num==16:
                self.freespace = [row, column]
                b.hide()
            self.grid.addWidget(b, row, column)
            self.buttons[row][column] = b

       
        layout = QtGui.QVBoxLayout()
        layout.addLayout(self.grid)#mahdavi: grid is a layout and NOT a widget
        self.setLayout(layout)
       
       
    def k(self):
        pass

    """##???????????????????
    def shuffle_buttons(self):
        lst = []
        for i in range(4):
            for j in range(4):
                 #if [i, j]==self.freespace:
                 #    lst.append(None)
                 #else:
                     lst.append(self.buttons[i][j])
        random.shuffle(lst)
        for i in range(4):
            for j in range(4):
                 self.buttons[i][j] = lst[i*4+j]
                 self.buttons[i][j].show()
                 #item = lst[i*4+j]
                 #if item==None:
                 #    self.freespace = [i, j]
                 #    self.buttons[i][j] = None
                 #else:
                 #    self.buttons[i][j] = item
    """

class gameWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.game = gamePade()
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.game)
        self.setLayout(layout)

    def findmoveable(self):
        self.moveable = []
        temp = placeButton()
        row1 = temp.row - 1
        row2 = temp.row + 1
        column1 = temp.column - 1
        column2 = temp.column + 1
             
        if row1 > -1 :
            if column1 > -1:
                self.moveable.append(self.buttonpanel[row1][column1])
            if column2 < 4:
                self.moveable.append(self.buttonpanel[row1][column2])
        if row2 < 4 :
            if column1 > -1:
                self.moveable.append(self.buttonpanel[row2][column1])
            if column2 < 4:
                self.moveable.append(self.buttonpanel[row2][column2])
        return self.moveable
       
                     
app = QtGui.QApplication(sys.argv)
widget = gameWidget()
widget.show()
#w2 = gamePade()
#w2.show()
sys.exit(app.exec_())
« آخرین ویرایش: 09 شهریور 1388، 08:55 ب‌ظ توسط ilius »

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #6 : 11 شهریور 1388، 03:18 ب‌ظ »
من رندمش رو نوشتم. به تابع سازنده کلاس gamePade یه آرگومان shuffle اضافه کردم که همون اول بازی رندم میکنه(در واقع بر می‌زنه) اما اینکه وسط بازی هم بشه این کارو کرد، نمی‌دونم چون با Qt آشنا نیستم. خودتون باید اضافه کنید. از تابع shuffle توی ماژول random باید استفاده بشه، این تابع یه لیست معمولی(تک‌بعدی) رو بر می‌زنه(ترتیب اعضاءش رو بصورت تصادفی تغییر میده). ولی اگه یه جدول(لیست دو بعدی) بهش بدید فقط ترتیب سطرهاش رو تغییر میده. برای همین من اون لیست 4x4 رو به یه لیست با طول تک‌بعدی با طول 16 تبدیل کردم، بعد بر زدم، بعد دوباره به لیست 4x4 تبدیل کردم.
#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys, random
from PyQt4 import QtCore, QtGui


class gameButton(QtGui.QPushButton):
    def __init__(self, parent=None):
        QtGui.QPushButton.__init__(self, parent)
        self.po = [] #mahdavi: we dont need it :) it was dreate automaticly when it used in gamepad class
       
       
    def findmove(self):
        self.moveable = []
#        temp = widget.game.freespace
        row1 = widget.game.freespace[0] - 1
        row2 = widget.game.freespace[0] + 1
        column1 = widget.game.freespace[1] - 1
        column2 = widget.game.freespace[1] + 1
             
        if row1 > -1 :
            self.moveable.append([row1, widget.game.freespace[1]])
        if column1 > -1:
            self.moveable.append([widget.game.freespace[0], column1])
        if row2 < 4 :
            self.moveable.append([row2, widget.game.freespace[1]])
        if column2 < 4:
            self.moveable.append([widget.game.freespace[0], column2])
   
    def moving(self):
        self.findmove()
               
        if self.po in self.moveable:
#            print self.moveable
            temp = widget.game.freespace
            widget.game.grid.addWidget(widget.game.buttons[self.po[0]][ self.po[1]], widget.game.freespace[0], widget.game.freespace[1])
            widget.game.freespace = self.po
            widget.game.buttons[temp[0]][temp[1]]= widget.game.buttons[self.po[0]][ self.po[1]]
            self.po = temp
            self.findmove()
#            print "free is: ", widget.game.freespace
#            print "move is: ",self.moveable
           


class gamePade(QtGui.QWidget):
    def __init__(self, parent=None, shuffle=True):
        self.row = int()
        self.column = int()       
        self.buttons = []
        self.grid = QtGui.QGridLayout()
        num = 1
       

        blist = []
       
        QtGui.QWidget.__init__(self, parent)
        for row in range(4):
            for column in range(4):
#                if row != 3 or column != 3:
                    b = gameButton()
                    b.setFont(QtGui.QFont("Tahoma", 30, QtGui.QFont.Bold))
                    self.connect(b, QtCore.SIGNAL("clicked()"), b.moving)
                    b.num = row*4 + column + 1
                    b.setText(str(b.num))
                    blist.append(b)
        if shuffle:
            random.shuffle(blist)
        self.buttons = [[None for i in range(4)] for i in range(4)]
        for i in range(16):
            b = blist[i]
            row = i/4
            column = i%4
            b.po = [row, column]
            if b.num==16:
                self.freespace = [row, column]
                b.hide()
            self.grid.addWidget(b, row, column)
            self.buttons[row][column] = b

       
        layout = QtGui.QVBoxLayout()
        layout.addLayout(self.grid)#mahdavi: grid is a layout and NOT a widget
        self.setLayout(layout)
       
       
    def k(self):
        pass

    """##???????????????????
    def shuffle_buttons(self):
        lst = []
        for i in range(4):
            for j in range(4):
                 #if [i, j]==self.freespace:
                 #    lst.append(None)
                 #else:
                     lst.append(self.buttons[i][j])
        random.shuffle(lst)
        for i in range(4):
            for j in range(4):
                 self.buttons[i][j] = lst[i*4+j]
                 self.buttons[i][j].show()
                 #item = lst[i*4+j]
                 #if item==None:
                 #    self.freespace = [i, j]
                 #    self.buttons[i][j] = None
                 #else:
                 #    self.buttons[i][j] = item
    """

class gameWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.game = gamePade()
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.game)
        self.setLayout(layout)

    def findmoveable(self):
        self.moveable = []
        temp = placeButton()
        row1 = temp.row - 1
        row2 = temp.row + 1
        column1 = temp.column - 1
        column2 = temp.column + 1
             
        if row1 > -1 :
            if column1 > -1:
                self.moveable.append(self.buttonpanel[row1][column1])
            if column2 < 4:
                self.moveable.append(self.buttonpanel[row1][column2])
        if row2 < 4 :
            if column1 > -1:
                self.moveable.append(self.buttonpanel[row2][column1])
            if column2 < 4:
                self.moveable.append(self.buttonpanel[row2][column2])
        return self.moveable
       
                     
app = QtGui.QApplication(sys.argv)
widget = gameWidget()
widget.show()
#w2 = gamePade()
#w2.show()
sys.exit(app.exec_())
دمت گرم خیلی ناز شده
یا علی

آفلاین mimook

  • Full Member
  • *
  • ارسال: 102
  • جنسیت : پسر
    • mimook
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #7 : 11 شهریور 1388، 04:47 ب‌ظ »
خیلی جالب بود ;)

آفلاین aliva

  • Sr. Member
  • *
  • ارسال: 363
  • جنسیت : پسر
    • http://vakilzade.ir
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #8 : 13 شهریور 1388، 04:18 ق‌ظ »
ما هم جوگیر شدیم یه نسخه از همینو با gtk و c++ نوشتیم.
فقط نمیدونم چرا اینقدر زیاد شد!
و البته انگار خیلی قاطی پاتی!

من اینا رو اضافه کردم
قابلیت اجرا به صورت قاطی
کلید newgame داره که دوباره به هم میریزه
اگر بازی را تمام کردید می فهمه
قابلیت تغیر تعداد دکمه ها(فقط باید برنامه رو دوباره make کنید.)

اقای مهدوی هنوز هیچی نشده یه نسخه رقیب وارد بازار شد! ;D

دانلود
« آخرین ویرایش: 13 شهریور 1388، 03:47 ب‌ظ توسط aliva »

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #9 : 15 شهریور 1388، 11:38 ق‌ظ »
ما هم جوگیر شدیم یه نسخه از همینو با gtk و c++ نوشتیم.
فقط نمیدونم چرا اینقدر زیاد شد!
و البته انگار خیلی قاطی پاتی!

من اینا رو اضافه کردم
قابلیت اجرا به صورت قاطی
کلید newgame داره که دوباره به هم میریزه
اگر بازی را تمام کردید می فهمه
قابلیت تغیر تعداد دکمه ها(فقط باید برنامه رو دوباره make کنید.)

اقای مهدوی هنوز هیچی نشده یه نسخه رقیب وارد بازار شد! ;D

دانلود

اتفاقا خیلی هم خوبه :) 70 درصد پروژه های اپن سورس بخاطر رقیب پیشرفت کردن ;)
یا علی

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر ب&#
« پاسخ #10 : 16 شهریور 1388، 12:29 ب‌ظ »
اینم یه مرحله جلوتر  ;)
#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys
from PyQt4 import QtCore, QtGui
import random
#from PyKDE4 import kdeui,kdecore



class gameButton(QtGui.QPushButton):
    def __init__(self, parent=None):
        QtGui.QPushButton.__init__(self, parent)
        self.po = []
       
       
    def findmove(self):
        self.moveable = []
        row1 = widget.game.freespace[0] - 1
        row2 = widget.game.freespace[0] + 1
        column1 = widget.game.freespace[1] - 1
        column2 = widget.game.freespace[1] + 1
             
        if row1 > -1 :
            self.moveable.append([row1, widget.game.freespace[1]])
        if column1 > -1:
            self.moveable.append([widget.game.freespace[0], column1])
        if row2 < widget.r :
            self.moveable.append([row2, widget.game.freespace[1]])
        if column2 < widget.c :
            self.moveable.append([widget.game.freespace[0], column2])
   
    def moving(self):
        self.findmove()
               
        if self.po in self.moveable:
            temp = widget.game.freespace
            widget.game.grid.addWidget(widget.game.buttons[self.po[0]][ self.po[1]], widget.game.freespace[0], widget.game.freespace[1])
            widget.game.freespace = self.po
            widget.game.buttons[temp[0]][temp[1]]= widget.game.buttons[self.po[0]][ self.po[1]]
            self.po = temp
            self.findmove()
    def setMyFocus(self):
        pass # in this function I set focus on buttons around this button by pressing arow keys
               


class gamePade(QtGui.QWidget):
    def __init__(self, userRow, userColumn, parent=None):
#        self.userRow = userRow
#        self.userColumn = userColumn
        self.row = int()
        self.column = int()       
        self.buttons = []
        self.grid = QtGui.QGridLayout()
        num = 1
       
       
       
       
        QtGui.QWidget.__init__(self, parent)
        for row in range(userRow):
            self.buttons.append([])
            for column in range(userColumn):
#                if row != 3 or column != 3:                   
                self.buttons[row].append(gameButton())
                self.buttons[row][column].setFont(QtGui.QFont("Tahoma", 30, QtGui.QFont.Bold))
                self.buttons[row][column].po = [row, column]
                self.grid.addWidget(self.buttons[row][column], row, column)
                self.buttons[row][column].setText(num.__str__())
                num = num + 1
                self.connect(self.buttons[row][column], QtCore.SIGNAL("clicked()"), self.buttons[row][column].moving)
#                    self.event(widget.keyPressEvent(),self.buttons[row][column].setMyFocus())
               
        self.buttons[userRow-1][userColumn-1].hide()
        self.freespace = [userRow-1, userColumn-1]
       
    def dist(self):
#        print widget.r, widget.c
        for row in range(widget.r):
            for column in range(widget.c):
               
#                print row , column
                self.buttons[widget.r - row - 1][widget.c - column - 1].hide()
                del self.buttons[widget.r - row - 1][widget.c - column - 1]
               
            del self.buttons[widget.r - row - 1]
               
#        layout = QtGui.QVBoxLayout()
#        layout.addLayout(self.grid) #mahdavi: grid is a layout and NOT a widget
#        self.setLayout(self.grid)
       


class gameWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
       
        self.rowNumber = QtGui.QSpinBox()

        self.columnNumber = QtGui.QSpinBox()
        startspacer = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        startButton = QtGui.QPushButton("NEW GAME!")
        startButton.connect(startButton, QtCore.SIGNAL("clicked()"),self.newGame)
        rowLabel = QtGui.QLabel("row:")
        columnLabel = QtGui.QLabel("column:")
       
        self.rowNumber.setValue(4)
        self.rowNumber.setMinimum(3)
        self.rowNumber.setMaximum(10)
       
        self.columnNumber.setValue(4)
        self.columnNumber.setMinimum(3)
        self.columnNumber.setMaximum(10)
       
        startLayout = QtGui.QHBoxLayout()
        startLayout.addWidget(rowLabel)
        startLayout.addWidget(self.rowNumber)
        startLayout.addWidget(columnLabel)
        startLayout.addWidget(self.columnNumber)
        startLayout.addItem(startspacer)
        startLayout.addWidget(startButton)
       
        self.r = self.rowNumber.value()
        self.c = self.columnNumber.value()
        self.game = gamePade(self.r,self.c)
       
        self.mylayout = QtGui.QVBoxLayout()
        self.mylayout.addLayout(startLayout)
        self.mylayout.addLayout(self.game.grid)
        self.setLayout(self.mylayout)
       
       
    def newGame(self):
        self.mylayout.removeItem(self.game.grid)
        self.game.dist()
        del self.game
       
        self.r = self.rowNumber.value()
        self.c = self.columnNumber.value()
       
        self.game = gamePade(self.r, self.c)
       
        self.mylayout.addLayout(self.game.grid)
        self.sizePolicy()
           
           
           
app = QtGui.QApplication(sys.argv)
widget = gameWidget()
widget.show()
sys.exit(app.exec_())
حالا فقط باید ببینم این بر زدن و رندم کردن چطوری بوده بذارمش داخل این جدیده !!
توی این بازی در هر جای بازی می تونید بازی رو دوباره شروع کنید و می تونید تعداد سر و ستون ها رو هم مشخص کنید
البته من محدودش کردم بین 3 و 10 ولی کافیه خطوط مربوط به این کر رو حذف کنید تا هر اندازه ای بتونید بازی کنید :)
همین که بفهمم ilius چکار کرده با قابلیت رندمش رو هم می ذارم :)
« آخرین ویرایش: 16 شهریور 1388، 12:40 ب‌ظ توسط سید حمید مهدوی »
یا علی

آفلاین aliva

  • Sr. Member
  • *
  • ارسال: 363
  • جنسیت : پسر
    • http://vakilzade.ir
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #11 : 19 شهریور 1388، 05:26 ق‌ظ »
و اینک نسخه 0.3 بازی منتشر شد! ;)

قابلیت‌های جدید:
قابلیت اجرا به صورت fullscreen یا کوچک(قابل تغییر حین بازی)
قابلیت تغییر تعداد خانه‌ها از ۴ تا ۶۴-پازل فقط به صورت مربعی اجرا می‌شود-

برای افزودن این آخری مجبور شدم کل کدو از اول بنویسم

مشکلی که داره اینه که برای تغییر سایز پنجره اصلی رو نابود می‌کنه و دوباره می سازه
که انگار کل برنامه restart  شده

دانلود

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #12 : 19 شهریور 1388، 09:29 ق‌ظ »
سلام دوستان
سید حمید مهدوی عزیز برنامت قشتنگه ولی یه مشکل داره! اونم اینکه این همه زحمت می‌کشیم تا جفت و جورش کنیم آخر سر نه تبریکی نه congratulationi هیچی به آدم نمی‌گه!  :)

aliva جان برنامه شما چه جوری اجرا می‌شه؟
وقتی سورسش رو هم کامپایل می‌کنم این خطا میاد (البته همه خطاها نیست اگه لازمه تا همه اونا رو بنویسم):
about.h:4:21: error: gtk/gtk.h: No such file or directoryبسته پیشنیازی لازم داره؟

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #13 : 19 شهریور 1388، 09:38 ق‌ظ »
و اینک نسخه 0.3 بازی منتشر شد! ;)

قابلیت‌های جدید:
قابلیت اجرا به صورت fullscreen یا کوچک(قابل تغییر حین بازی)
قابلیت تغییر تعداد خانه‌ها از ۴ تا ۶۴-پازل فقط به صورت مربعی اجرا می‌شود-

برای افزودن این آخری مجبور شدم کل کدو از اول بنویسم

مشکلی که داره اینه که برای تغییر سایز پنجره اصلی رو نابود می‌کنه و دوباره می سازه
که انگار کل برنامه restart  شده

دانلود

نه انگار رقیب جدی اومده تو کار باید آستینا رو بالا بزنم ;)



سلام دوستان
سید حمید مهدوی عزیز برنامت قشتنگه ولی یه مشکل داره! اونم اینکه این همه زحمت می‌کشیم تا جفت و جورش کنیم آخر سر نه تبریکی نه congratulationi هیچی به آدم نمی‌گه!  :)

aliva جان برنامه شما چه جوری اجرا می‌شه؟
وقتی سورسش رو هم کامپایل می‌کنم این خطا میاد (البته همه خطاها نیست اگه لازمه تا همه اونا رو بنویسم):
about.h:4:21: error: gtk/gtk.h: No such file or directoryبسته پیشنیازی لازم داره؟

چشم امشب که رفتم خونه درستش می کنم (چند تا گل و بل بل مذارم دور و برش وقتی با موفقیت تمومش کردی براتچه چه بزنن :D ) خارج از شوخی یه فکری براش می کنم
برنامه من چند تا ایراد داره
1 - بر نمی زنه که البته با توجه به کد های ilius درستش می کنم
2 - اتمام بازی رو مشخص نمی کنه
3 - رکورد ها رو ثبت نمی کنه
4 - با صفحه کلید نمی شه راحت باش کار کرد
که ان شا الله اگر جور بشه درستش می کنم
خوب به قول بچه ها تازه ورژن 0.3 بود
یا علی

آفلاین aliva

  • Sr. Member
  • *
  • ارسال: 363
  • جنسیت : پسر
    • http://vakilzade.ir
پاسخ به: یه بازی تکراری !! این رو ببینید و نظر بدید
« پاسخ #14 : 19 شهریور 1388، 10:45 ب‌ظ »
سلام دوستان
سید حمید مهدوی عزیز برنامت قشتنگه ولی یه مشکل داره! اونم اینکه این همه زحمت می‌کشیم تا جفت و جورش کنیم آخر سر نه تبریکی نه congratulationi هیچی به آدم نمی‌گه!  :)

aliva جان برنامه شما چه جوری اجرا می‌شه؟
وقتی سورسش رو هم کامپایل می‌کنم این خطا میاد (البته همه خطاها نیست اگه لازمه تا همه اونا رو بنویسم):
about.h:4:21: error: gtk/gtk.h: No such file or directoryبسته پیشنیازی لازم داره؟
به نظر می‌رسد شما لایبرری‌های مورد نیاز را ندارید داخل ترمینال بزنید
pkg-config --cflags gtk+-2.0
اگر خروجی نوشته بود نیست و نداریم و این حرفا!
باید این رو نصب کنید
gtk2-devel
اگر داشته باشید که ندارید خروجی یه چیزی توی این مایه‌هاست
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12
 

نه انگار رقیب جدی اومده تو کار باید آستینا رو بالا بزنم ;)
تازه هنوز نسخه STABLE رو ریلیز نکردم بفهمین دنیا دست کیه! ;)