ক্যানভাসের আশেপাশে 8-বিট স্টাইলের বাউন্সিং বল


20

কমোডোর 64 ব্যবহারকারীর গাইড থেকে এই তালিকাটি দ্বারা অনুপ্রাণিত:

10 PRINT "{CLR/HOME}"
20 POKE 53280,7 : POKE 53281,13
30 X = 1 : Y = 1
40 DX = 1 : DY = 1
50 POKE 1024 + X + 40 * Y, 81
60 FOR T = 1 TO 10 : NEXT
70 POKE 1024 + X + 40 * Y, 32
80 X = X + DX
90 IF X <= 0 OR X >= 39 THEN DX = -DX
100 Y = Y + DY
110 IF Y <= 0 OR Y >= 24 THEN DY = -DY
120 GOTO 50

আপনার টার্মিনাল, স্ক্রিন, ক্যানভাস বা অন্যান্য ভিজ্যুয়াল ডিসপ্লে এরিয়া জুড়ে একটি বল-সদৃশ বস্তুটি বাউন্স করার জন্য আপনার নির্বাচিত ভাষা / প্ল্যাটফর্মে একটি অনুরূপ প্রোগ্রাম তৈরি করুন।

আপনাকে সি 64 এর পিইটিএসসিআইআই গ্রাফিক্সটি হুবহু অনুকরণ করতে হবে না, একটি সাধারণ Oবা oকরবে, না আপনার GOTOকমান্ডটি এখনও আপনার ভাষাতে উপস্থিত থাকলে তা ব্যবহার করতে হবে না। যতক্ষণ না আপনার বলটি আপনার ক্যানভাসের শীর্ষে শুরু হয় এবং ক্যানভাসের সীমা না ছোঁড়া পর্যন্ত তির্যকভাবে ভ্রমণ করে এবং ততক্ষণে সেই অনুসারে বাউন্স করুন:

  • নীচে এবং ডানদিকে ভ্রমণ এবং পর্দার ক্ষেত্রের নীচে হিট, উপরে উঠে এবং ডান অবিরত;
  • উপরে এবং ডানদিকে ভ্রমণ এবং ডানদিকের সর্বাধিক সীমানা হিট, এবং বাম এবং উপরে বাউন্স;
  • বাম এবং উপরে ভ্রমণ এবং শীর্ষে হিট, বাম এবং নীচে বাউন্স;
  • বাম এবং নীচে ভ্রমণ এবং বাম-সীমাতে পৌঁছে, ডান এবং নীচে বাউন্স;
  • যে কোনও কোণে আঘাত করে এবং বিপরীত দিক;

তাহলে আমরা সবাই ভাল আছি।

আপনাকে একবারে 8-পিক্সেল বলটি স্থানান্তর করতে হবে না, যেমন সি 64 এ বেসিক তালিকার ক্ষেত্রে ঘটছে; আপনি একবারে একটি চরিত্রের ব্লক বা একটি পিক্সেল সরিয়ে নিতে পারেন, যাকে আপনি সবচেয়ে উপযুক্ত বলে মনে করেন।

এই বেসিক তালিকাটি কাজ করে দেখতে, আপনি এটি এই অনলাইন কমোডোর 64 এমুলেটর দিয়ে টাইপ করতে পারেন আপনার ব্রাউজারটিকে ফ্ল্যাশ সমর্থন করে।


2
জাভাস্ক্রিপ্ট ক্যানভাস। ডি আহ।
ম্যাথু রোহ

আজকাল আপনি কী স্ক্রিন কল করবেন তা আমি নিশ্চিত নই। আপনি কেবলমাত্র আপনার টেলিভিশন সেট বা ভিডিইউ দিয়ে কেবল পর্দা এবং সীমান্ত অঞ্চল দেখতেন ... এবং এখন আপনি টার্মিনাল, উইন্ডোজ, ক্যানভ্যাস, স্টাডআউট ইত্যাদি পেয়েছেন ... এটি আমার কাছে খুব বিভ্রান্তিকর।
শন বেবারস

আমাদের যদি ধ্রুব পিক্সেল আকারের মান হয় তবে এটি আরও ভাল।
ম্যাথু রোহ

4
আমরা কি 1x1 এর পর্দার আকার ধরে এবং চিরকালের জন্য ও মুদ্রণ করতে পারি?
ম্যাথু রোহ

উত্তর:


3

6502 মেশিন কোড (সি 64), 90 89 91 বাইট

+2 বাইট কারণ এটি প্রয়োজন বোঝা ঠিকানা (না আমাদের PIC স্ব পরিবর্তনের কারণ)

00 C0 20 44 E5 CA D0 FD C6 FC D0 F9 A2 20 86 FC A9 D8 85 9E A9 03 85 9F A4 CA
18 A5 9E 69 28 85 9E 90 02 E6 9F 88 10 F2 A4 C9 8A 91 9E C9 20 D0 08 E6 C9 E6
CA A2 51 10 D7 A5 C9 F0 04 C9 27 D0 08 AD 2F C0 49 20 8D 2F C0 A5 CA F0 04 C9
18 D0 B4 AD 31 C0 49 20 8D 31 C0 D0 AA

অনলাইন ডেমো

ব্যবহার: sys49152

আমি আকার কমাতে কঠোর চেষ্টা করেছি (উদাহরণস্বরূপ আইআরকিউ ব্যবহার না করে পরিবর্তে বোকা ফাঁকা লুপ), তিতের গল্ফড সি 64 বেসিকের স্তরে পৌঁছানো এখনও অসম্ভব : ওহ, ভাল well তবে এটি কম ঝলকানি দেখায়;)

ব্যাখ্যা: (অপ্রয়োজনীয়)

00 C0       .WORD $C000         ; load address
20 44 E5    JSR $E544           ; clear screen
CA          DEX
D0 FD       BNE $C003           ; inner wait (256 decrements)
C6 FC       DEC $FC
D0 F9       BNE $C003           ; outer wait (32 decrements in zeropage)
A2 20       LDX #$20            ; wait counter and screen code for "space"
86 FC       STX $FC             ; store wait counter
A9 D8       LDA #$D8            ; load screen base address ...
85 9E       STA $9E             ; ... -40 (quasi row "-1") ...
A9 03       LDA #$03            ; ... into vector at $9e/$9f
85 9F       STA $9F
A4 CA       LDY $CA             ; load current row in Y
18          CLC                 ; clear carry flag
A5 9E       LDA $9E             ; add ...
69 28       ADC #$28            ; ... $28 (40 cols) to ...
85 9E       STA $9E             ; ... vector
90 02       BCC $C023
E6 9F       INC $9F             ; handle carry
88          DEY                 ; count rows down
10 F2       BPL $C018
A4 C9       LDY $C9             ; load current col in Y
8A          TXA                 ; copy screen code from X to A
91 9E       STA ($9E),Y         ; store at position of screen
C9 20       CMP #$20            ; screen code was "space"
D0 08       BNE $C037           ; if not, ball was drawn
E6 C9       INC $C9             ; next column   | opcodes are modified
E6 CA       INC $CA             ; next row      | here for directions
A2 51       LDX #$51            ; screen code for "ball"
10 D7       BPL $C00E           ; and back to drawing code
A5 C9       LDA $C9             ; load current column
F0 04       BEQ $C03F           ; if zero, change X direction
C9 27       CMP #$27            ; compare with last column (39)
D0 08       BNE $C047           ; if not equal, don't change X direction
AD 2F C0    LDA $C02F           ; load opcode for X direction
49 20       EOR #$20            ; toggle between ZP INC and DEC
8D 2F C0    STA $C02F           ; store back
A5 CA       LDA $CA             ; load current row
F0 04       BEQ $C04F           ; if zero, change Y direction
C9 18       CMP #$18            ; compare with last row (24)
D0 B4       BNE $C003           ; if not equal, don't change Y direction
AD 31 C0    LDA $C031           ; load opcode for Y direction
49 20       EOR #$20            ; toggle between ZP INC and DEC
8D 31 C0    STA $C031           ; store back
D0 AA       BNE $C003           ; -> main loop

কেবল মজাদার জন্য, এখানে বলের জন্য স্প্রিট ব্যবহার করে এবং 385 বাইটে ( স্থানটিতে ব্যবহৃত স্প্রাইট ডেটা ধারণ করে) আঘাত করার সময় সীমান্তটি ফ্ল্যাশ করার জন্য আরও পেশাদার বৈকল্পিক রয়েছে :

00 C0 AD 15 D0 F0 30 A9 CC 85 FC A9 04 20 A2 C0 A9 97 8D 00 DD A9 15 8D 18 D0 
A9 00 8D 15 D0 8D 1A D0 A2 81 8E 0D DC A2 31 8E 14 03 A2 EA 8E 15 03 58 A6 D6 
4C F0 E9 A9 04 85 FC A9 CC 20 A2 C0 A2 31 86 01 A2 10 A9 D0 85 FC B1 FB C6 01 
91 FB E6 01 C8 D0 F5 E6 FC CA D0 F0 A9 37 85 01 A9 94 8D 00 DD A9 35 8D 18 D0 
8D 27 D0 A2 05 8E F8 CF A2 01 8E 15 D0 8E 1A D0 8E 12 D0 86 FD 86 FE A2 18 8E 
00 D0 A2 1B 8E 11 D0 A2 32 8E 01 D0 A2 7F 8E 0D DC AE 0D DC AE 20 D0 86 FB A2 
C1 8E 14 03 A2 C0 D0 8A 85 FE 8D 88 02 A9 00 85 FB 85 FD A2 04 A0 00 78 B1 FB 
91 FD C8 D0 F9 E6 FC E6 FE CA D0 F2 60 A6 FB 8E 20 D0 CE 19 D0 A5 FD F0 20 AD 
00 D0 18 69 04 8D 00 D0 90 03 EE 10 D0 C9 40 D0 2C AD 10 D0 29 01 F0 25 20 38 
C1 C6 FD F0 1E AD 00 D0 38 E9 04 8D 00 D0 B0 03 CE 10 D0 C9 18 D0 0C AD 10 D0 
29 01 D0 05 20 38 C1 E6 FD A5 FE F0 14 AD 01 D0 18 69 04 8D 01 D0 C9 E6 D0 19 
20 38 C1 C6 FE F0 12 AD 01 D0 38 E9 04 8D 01 D0 C9 32 D0 05 20 38 C1 E6 FE 4C 
31 EA A9 01 8D 20 D0 60 00 00 00 7E 00 03 FF C0 07 FF E0 1F FF F8 1F FF F8 3F 
FF FC 7F FF FE 7F FF FE FF FF FF FF FF FF FF FF FF FF FF FF 7F FF FE 7F FF FE 
3F FF FC 1F FF F8 1F FF F8 07 FF E0 03 FF C0 00 7E 00 00 00 00 

অনলাইন ডেমো - | - সংযুক্তকারী উত্স ব্রাউজ করুন

বাউনিং বলটি শুরু এবং বন্ধ করুন sys49152

  • এটি সি -64 বেসিক চলমান ছেড়ে দেয়, যা ভিসিক -২ ঠিকানা স্থানকে উপরে স্থানান্তরিত করে সম্পন্ন করা হয় $C000, যার জন্য পর্দার সামগ্রী এবং অক্ষর সেট (ফন্ট) অনুলিপি করা প্রয়োজন।
  • এটি সিস্টেম আইআরকিউতে ঝাঁকুনি দেয় এবং ঝাঁকুনি এড়ানোর জন্য, এই আইআরকিউটির উত্সকে ভিসি -২ গ্রাফিক্স চিপে পরিবর্তন করে, তাই সর্বদা ফ্রেমগুলির মধ্যে আপডেট করা হয়।
  • গ্লিচগুলি:
    1. RUN/STOP + RESTORE ভেঙে গেছে, চেষ্টা করবেন না
    2. আইআরকিউ উত্স হিসাবে ভিসি -২ সহ, কার্সারটি কিছুটা ধীরে ধীরে জ্বলে ওঠে এবং TI$পাশাপাশি পিছিয়ে থাকবে।
    3. যখন সময় সীমান্ত চমকিত হয় (খুব অসম্ভাব্য কিন্তু সম্ভব) বাঁধন, এটা থাকে সাদা - আপনি নিজে পুনঃস্থাপন করতে হবে।

1
এটি সম্পূর্ণ স্বাধীন নয়, তাই না? আমি দুটি পরম এলডিএ এবং দুটি এসটিএ দেখছি। তবুও দুর্দান্ত কাজ!
টাইটাস

অভিশাপ আপনি ঠিকই বলেছেন: হে আমি নিজেই পরিবর্তনটি ভুলে গেছি! আমি পিসিতে আসার সাথে সাথে আপডেট করব।
ফেলিক্স প্যালম্যান 5'17

1
@ টিটাস ফিক্সড ... এবং মজাদার জন্য একটি "আরও ভাল" রূপ যুক্ত করেছেন :)
ফেলিক্স প্যালম্যান

আপনি স্প্রাইট প্যাকিং বিবেচনা করেছেন? (হুম ... চরসেট রমটি ব্যবহার করুন?) এবং আমি inc $d020তার চেয়ে বেশি পছন্দ করি jsr flash;) হিটশিম্ফাইড উইলথলারেটআউট এর দুর্দান্ত !
তিতাস

1
@ টিটাস 2 বাইট সংরক্ষণ করবে, হ্যাঁ। লোড ঠিকানা হিসাবে, এটি একটি বৈধ .prgফাইলের অংশ এবং আমার মেটা প্রশ্ন থেকে আমি এখানে নিয়েছি আমাকে এটি অন্তর্ভুক্ত করতে হবে ... কোডটি অবস্থান স্বাধীন থাকলে সম্ভবত এটি ছেড়ে দিতে পারতাম।
ফেলিক্স প্যালম্যান

14

বাশ + ইউনিক্স ইউটিলিটিস, 125 117 বাইট

for((x=y=u=v=1;;x+=u,y+=v,u=(x<1||x>=`tput cols`-1)?-u:u,v=(y<1||y>=`tput lines`-1)?-v:v)){
tput cup $y $x
sleep .1
}

নমুনা রান অ্যানিমেশন:

নমুনা রান অ্যানিমেশন


6
এটি ঠিক কোণে আঘাত! : ও
mbomb007

11

সিপি -1610 বিধানসভা, 67 ... 64 62 ডেস্কলিজ = 78 বাইট

এই কোড একটি অন চালানো যাবে দেয়ার উদ্দেশ্যে করা হচ্ছে Intellivision । এটি এর একটি হার্ডওয়্যার স্প্রাইট ব্যবহার করছে, এটি এমওবি (মোবাইল অবজেক্টের জন্য) নামে পরিচিত।

একটি সিপি -1610 অপকোডটি 10-বিট মান সহ এনকোড করা হয়েছে, এটি একটি 'ডিসেল' হিসাবে পরিচিত। এই প্রোগ্রামটি 62 ডিইসিএলইএস দীর্ঘ, 4800 ডলার থেকে শুরু হয়ে and 483D এ শেষ।

হেক্সাডেসিমাল ডাম্প + উত্স

                            ROMW  10            ; use 10-bit ROM
                            ORG   $4800         ; start program at address $4800

                    FRAME   EQU   $17E          ; frame #

                            ;; ------------------------------------------------ ;;
                            ;;  main entry point                                ;;
                            ;; ------------------------------------------------ ;;
                    main    PROC

4800 0001                   SDBD                ; load Interrupt Service Routine
4801 02B8 002B 0048         MVII  #isr,   R0    ; into R0

4804 0240 0100              MVO   R0,     $100  ; update ISR
4806 0040                   SWAP  R0
4807 0240 0101              MVO   R0,     $101

4809 02B9 0208              MVII  #$0208, R1    ; initialize R1 = X
480B 02BA 0108              MVII  #$0108, R2    ; initialize R2 = Y
480D 02BB 0001              MVII  #1,     R3    ; initialize R3 = DX
480F 009C                   MOVR  R3,     R4    ; initialize R4 = DY

4810 0002                   EIS                 ; enable interrupts

                            ;; ------------------------------------------------ ;;
                            ;;  main loop                                       ;;
                            ;; ------------------------------------------------ ;;
4811 0280 017E      @@loop  MVI   FRAME,  R0    ; R0 = current frame #

4813 0340 017E      @@spin  CMP   FRAME,  R0    ; wait for next frame
4815 0224 0003              BEQ   @@spin

4817 00D9                   ADDR  R3,     R1    ; X += DX

4818 0379 02A0              CMPI  #$2A0,  R1    ; reached right border?
481A 0204 0003              BEQ   @@updDx

481C 0379 0208              CMPI  #$208,  R1    ; reached left border?
481E 002F                   ADCR  PC

481F 0023           @@updDx NEGR  R3            ; DX = -DX

4820 00E2                   ADDR  R4,     R2    ; Y += DY

4821 037A 0160              CMPI  #$160,  R2    ; reached bottom border?
4823 0204 0003              BEQ   @@updDy

4825 037A 0108              CMPI  #$108,  R2    ; reached top border?
4827 002F                   ADCR  PC

4828 0024           @@updDy NEGR  R4            ; DY = -DY

4829 0220 0019              B     @@loop        ; loop forever

                            ENDP

                            ;; ------------------------------------------------ ;;
                            ;;  ISR                                             ;;
                            ;; ------------------------------------------------ ;;
                    isr     PROC

482B 01DB                   CLRR  R3            ; clear a bunch of STIC registers
482C 02BC 0020              MVII  #$20,   R4

482E 0263           @@clear MVO@  R3,     R4    ; (including background color,
482F 037C 0032              CMPI  #$32,   R4    ; border color, etc.)
4831 0226 0004              BLE   @@clear

4833 0259                   MVO@  R1,     R3    ; update X register of MOB #0
4834 0242 0008              MVO   R2,     $8    ; update Y register of MOB #0
4836 02BB 017E              MVII  #$017E, R3    ; update A register of MOB #0
4838 0243 0010              MVO   R3,     $10   ; (using a yellow "O")

483A 0298                   MVI@  R3,     R0    ; increment frame #
483B 0008                   INCR  R0
483C 0258                   MVO@  R0,     R3

483D 00AF                   JR    R5            ; return from ISR

                            ENDP

আউটপুট

আউটপুট


10

এইচটিএমএল (মাইক্রোসফ্ট এজ / ইন্টারনেট এক্সপ্লোরার), ৮১ বাইট

এই নেস্টড <marquee>ট্যাগ সহ 1998 এর ভান করুন :

<marquee behavior=alternate direction=down><marquee behavior=alternate width=99>O

মাইক্রোসফ্ট এজতে পরীক্ষিত, যদিও আমি যা পড়েছি তা থেকে এখনও মার্কিকে সমর্থন করা উচিত। সিদ্ধান্ত নিয়ে ক্রোমে কাজ করে না

সেটিংটি direction=up2 বাইট বাঁচাতে পারে তবে বলটি ক্যানভাসের শীর্ষে শুরু করতে হবে এমন নিয়মটি ভেঙে।


দুর্ভাগ্যক্রমে, এটি বলটি চ্যালেঞ্জের মতো প্রয়োজনীয় হিসাবে বলটি তির্যকভাবে ভ্রমণ করে না বলে এটি একটি অবৈধ উত্তর।
এল'ইনিয়া স্টারম্যান

আপনি কি এটি মাইক্রোসফ্ট এজ এ চেষ্টা করেছেন? ক্রোমটি directionবৈশিষ্ট্যটিকে সমর্থন করে বলে মনে হচ্ছে না ।
জ্যাক ব্রাউনস্টাইন

হু, আমার ক্ষমা চাইছি - এটি এজতে কাজ করে। আমি এটি নিশ্চিত করতে পারি যে এটি ক্রোমে কাজ করে না এবং আমি প্রমাণ করতে পারি যে এটি ফায়ারফক্স এবং ইন্টারনেট এক্সপ্লোরারে কাজ করে। চারটির মধ্যে তিনটি খারাপ নয় (এবং এই উত্তরটি বৈধ হওয়ার জন্য আপনার কেবল একটির প্রয়োজন)। +1
এল'েন্ডিয়া স্টারম্যান

1
+1 এর জন্য marquee, এটি বেশ সৃজনশীল!
মেটোনিয়াম

আমার জন্য ক্রোমে কাজ করেছেন।
ckjbgames

8

টিআই-বেসিক, 71 70

1->A
1->B
1->C
1->D
While 1
ClrHome
Output(B,A,0
A+C->A
B+D->B
If A<2 or A>15
~C->C
If B<2 or B>7
~D->D
End

বেশ আক্ষরিক অনুবাদ, এটি আরও ছোট করার কৌশল থাকলে আমি অবাক হব না।

স্ক্রিনটি 16x8 এবং 1-ইনডেক্সযুক্ত তাই ধ্রুবকগুলি পৃথক।

~ প্রত্যাখাত প্রতীকটি লেখার সোর্সকোডার উপায়।

বাউন্সিং জিআইএফ

এটি হার্ডওয়্যারে মসৃণ দেখায়।


আপনি কি নিশ্চিত এটি 70 বাইট? দেখে মনে হচ্ছে এর চেয়ে কম।
12

@ 12Me21 আপনি কয়টি বাইট গণনা করেন? আমি যদি কোনও ক্যালকুলেটরে এটি সংরক্ষণ করি এবং আমি আমার বুকের সাথে একমত খালি প্রোগ্রামের জন্য 10 বাইট পাই তবে আমি 80 বাইট পাই।
6:48

ওহ, আমার ধারণা আমি তখন ভুল বলেছি।
12

7

বেফুঞ্জ, 209 বাইট

>10120130pppp>"l52?[J2["39*,,,,39*,,,,,,v
v+56/+55\%+55:+1g01*83-"6!"7\-"6!?"8-*86<
>00g1+:55+%\55+/"+!6"-48*,68>*#8+#6:#,_v$
v:+g03g01p02+-\g02*2!-*64\*2!:p00:+g02g<$
>10p:!2*\"O"-!2*30g\-+30p"2"::**>:#->#1_^

এটি 80x25 এর পর্দার আকার ধারণ করে, তবে আপনি সহজেই "O"শেষ লাইনে ( 79৯ *64) এবং দ্বিতীয় শেষ লাইনে (২৪) প্রতিস্থাপন করে পরিসীমাটিকে ঝাঁকুনি করতে পারেন (নোট করুন যে দ্বিতীয় শেষ লাইনটি ডান থেকে বামে কার্যকর করা হয়েছে)। "2"শেষ লাইনে (50) প্রতিস্থাপনের মাধ্যমে গতিটিও সামঞ্জস্য করা যায় ।


7

জাভা, 184 176 বাইট

class A{public static void main(String[]a)throws Exception{for(int X=1,Y=1,x=1,y=1;;System.out.print("\033["+X+";"+Y+"H"),Thread.sleep(50),X+=x=X%25<1?-x:x,Y+=y=Y%85<1?-y:y);}}

এটি কার্সারটি স্থানান্তর করতে এএনএসআই এস্কেপ সিকোয়েন্সগুলি ব্যবহার করে, এটি এমন একটি বস্তু যা প্রায় কাছাকাছি বাউন্স করে85 x 25 টার্মিনাল ডিসপ্লেতে । নামের একটি ফাইলে সংরক্ষণ করুন A.java

Ungolfed

class Terminal_Bouncing_Ball {
    public static void main(String[] args) throws InterruptedException {
        int X = 0, Y = 0, dx = 1, dy = 1;
        while (true) {
            System.out.print(String.format("\033[%d;%dH",X,Y));
            Thread.sleep(50);
            dx = (X < 1) ? 1 : (X > 71) ? -1 : dx;
            dy = (Y < 1) ? 1 : (Y > 237) ? -1 : dy;
            X += dx;
            Y += dy;
        }
    }
}

ডেমো

উদাহরণ


এটি কোড গল্ফ, সুতরাং আপনি মুছে ফেলতে চাইবেন Thread.sleep(50)। এবং আপনার গল্ফড এবং অলোভিত প্রোগ্রামগুলি মেলে না।
Jakob

4

ক্লোজার, 398 380 375 বাইট

(ns g(:require[quil.core :as q]))(def w 1e3)(def h 1e3)(def f 100)(def b(atom{:x f :y f :n 1 :m 1}))(q/defsketch . :size[w h]:setup #(do(q/text-font(q/create-font""f))(q/fill 255 255 255)):draw #(let[s 9{x :x y :y n :n m :m}@b c(+ x(* n s))u(+ y(* m s))](q/background 0 0 0)(reset! b{:x c :y u :n(if(< 0 c(- w f))n(* -1 n)):m(if(<(+ 0 f)u h)m(* -1 m))})(q/text"O"(:x @b)(:y @b))))

এটির ডিফল্ট করতে ফন্টের নামটি খালি স্ট্রিংয়ে -18 বাইটগুলি সীমাবদ্ধ চেকগুলি ইনলাইন করে এবং নীচের সীমানা ইস্যুটি স্থির করে (যা আপনি জিআইএফ দেখতে পাবেন)। ফিক্সিং যা আসলে বাইটস সংরক্ষণ করে।

-5 আরও বোধক ডেস্ট্রাকচার সিনট্যাক্সে পরিবর্তন করে এবং একটি পিক্সেল দিয়ে বল সঙ্কুচিত করে বাইট।

কুইল ব্যবহার করে

আমি ক্রিয়ামূলক মোডে স্যুইচ করার চেষ্টা করেছি, তবে এটির জন্য প্রচুর অতিরিক্ত কোড দরকার এবং এটি আরও ব্যয়বহুল হয়ে ওঠে।

(ns bits.golf.ball-bounce
  (:require [quil.core :as q]))

(def width 1000)
(def height 1000)

(def font-size 100)

; Mutable state holding the properties of the ball. n and m are the directions on the x and y axis.
(def ball (atom {:x 300 :y 600 :n 1 :m 1}))

(q/defsketch b
  :size [width height] ; Window size

  :setup #(do
            (q/text-font (q/create-font "Arial" font-size)) ; Set the font
            (q/fill 255 255 255)) ; And the text color

  :draw
  #(let [speed 9
         ; Deconstruct the state
         {:keys [x y n m]} @ball
         next-x (+ x (* n speed))
         next-y (+ y (* m speed))

         ; I'm adding/subtracting the font-size so it stays in the window properly
         x-inbounds? (< 0 next-x (- width font-size))
         y-inbounds? (< (+ 0 font-size) next-y height)]

     ; Wipe the screen so the ball doesn't smear
     (q/background 0 0 0)

     ; Reset the state
     (reset! ball
             {:x next-x
              :y next-y
              :n (if x-inbounds? n (* -1 n))
              :m (if y-inbounds? m (* -1 m))})

     ; Draw the ball
     (q/text "O" (:x @ball) (:y @ball))))

বল বাউনিং জিআইএফ

(দ্রষ্টব্য, নতুন সংস্করণটি জিআইএফ-এর মতো স্ক্রিনের নীচে বামে তাড়াত না ounce


আমি ঠিক বুঝতে পেরেছি যে আমি (+ 0 font-size)সেখানে। এটা বিব্রতকর। আমি এটি পরবর্তী সংস্করণে ঠিক করব। আমাকে 5 বাইটের মতো সাশ্রয় করা উচিত
কারসিজিনিট

4

র‌্যাকেট 247 বাইট

(let*((w 500)(h(* w 0.6))(x 100)(y 0)(d 10)(e d)(G(λ(t)(set! x(+ x d))(when(or(> x w)(< x 0))
(set! d(* d -1)))(set! y(+ y e))(when(or(> y h)(< y 0))(set! e(* e -1)))
(underlay/xy(rectangle w h"solid""white")x y(circle 10"solid""black")))))(animate G))

Ungolfed:

(require 2htdp/image
         2htdp/universe) 

(let* ((wd 500)            ; define variables and their initial values
       (ht 300)
       (x 100)
       (y 0)
       (dx 10)
       (dy 10)

       (imgfn              ; define function to draw one frame; called repeatedly by animate fn; 
        (λ (t)             ; t is number of ticks till now- sent by animate fn; ignored here;

                           ; update location (x and y values):
          (set! x (+ x dx))
          (when (or (> x wd) (< x 0))
            (set! dx (* dx -1)))             ; invert direction at edges
          (set! y (+ y dy))
          (when (or (> y ht) (< y 0))
            (set! dy (* dy -1)))             ; invert direction at edges

                           ; draw image: 
          (underlay/xy
           (rectangle wd ht "solid" "white") ; draw background
           x y                               ; go to location (x,y)
           (circle 10 "solid" "black")       ; draw ball
          ))))

  (animate imgfn))         ; animates the images created by imgfn (default rate 28 times/sec)

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


1
র‌্যাকেট নিয়ে র‌্যাকেটবল খেলছে!
ckjbgames

এটা ভাল গুলোর একটি!
rnso

"স্কোয়াট" প্রোগ্রামিং ভাষা থেকে "র্যাকেট" উদ্ভূত: স্কিমের পরে (একটি ছদ্মবেশী পরিকল্পনা) র‌্যাকেট (একটি কেলেঙ্কারী বা গণ্ডগোল) রয়েছে!
rnso

@ এমএসও আরও ভাল!
ckjbgames

3

জেলি, 37 বাইট

“ñc‘Ọ24ḶŒḄṖ⁸ị⁷x⁸µ80ḶŒḄṖ⁸ị⁶x⁸‘œS.1
Ç1¿

থেকে কিছু সাহায্য নিয়ে এই উত্তরলুপটি পেতে এবং অক্ষরগুলি সরাসরি পাওয়ার জন্য । বর্তমানে এটি একটি 80x24 স্ক্রিনে চারদিকে বাউন্স করে তবে কোডটিতে এটি সহজেই সংশোধন করা যায়।

প্রতিটি দিকের স্থানাঙ্কগুলি দুটি তালিকার উপাদান হিসাবে উপস্থাপিত হতে পারে [0, 1,..., 24, 23,..., 1]এবং[0, 1,..., 80, 79,..., 1] আসুন তাদের কল করুন Yএবং X, যা অসীম পুনরাবৃত্তি হয়। এই অসীম পুনরাবৃত্তিটি মডিউলার ইনডেক্সিং - জেলি ব্যবহার করে অনুকরণ করা যায় । উদাহরণ: iতম পুনরাবৃত্তিতে বলটি অবস্থানে রয়েছে (X[i%|X|], Y[i%|Y|]) = (iịY, iịX)। চলন্ত বলটি কেবলমাত্র একটি কার্সর যা iịYনিউলাইন এবং iịXস্পেসগুলি নির্ধারণের দ্বারা অবস্থানে রাখা হয় ।

ডেমো

https://i.gyazo.com/b8eac64097cb6d3a18185877c2f4c945.gif

ব্যাখ্যা

“ñc‘Ọ24ḶŒḄṖ⁸ị⁷x⁸µ80ḶŒḄṖ⁸ị⁶x⁸‘œS.1        Monadic helper link - argument i.
                                         Resets the terminal, prints Y[i] newlines,
                                         X[i] spaces and returns i + 1.
“ñc‘                                     Set the output to [27, 99]
    Ọ                                    Convert to characters and print (\x1bc)
                                          -> Cursor is at position (0,0)
     24Ḷ                                 Lowered range of 24. Yields [0,...,23].
        ŒḄ                               Bounce. Yields [0,...,23,22,...,0].
          Ṗ                              Pop. Yields [0,...,23,22,...,1] = Y.
           ⁸ị                            Modular index i (⁸) into Y. The current
                                         value is the Y coordinate, y.
              x                          Repeat y times
             ⁷                           the newline character ('\n').
               ⁸                         Output that (y times '\n') and continue
                                         with value i.
                                          -> Cursor is at position (0, y)
                µ                        Monadic chain separation.
                 80ḶŒḄṖ                  Same as above, but this time yielding X.
                       ⁸ị                Modular index i into X, yielding the
                                         value for x.
                          x              Repeat x times
                         ⁶               the whitespace character.
                           ⁸             Output that (x times ' ') and continue
                                         with value i.
                                         -> Cursor is at position (x, y), the
                                            final position.
                             œS.1        Wait 0.1 seconds.
                            ‘            Return i + 1.

Ç1¿                                      Main (niladic) link.
 1¿                                      While true.
Ç                                        Call the helper link. The first time
                                         there is no argument and i will be [],
                                         which is cast to 0 when used as integer
                                         (e.g. try ‘¶Ç). After that, the previous
                                         return value (i + 1) is used.

2

SmileBASIC, 85 74 বাইট

SPSET.,9M=MAINCNT
SPOFS.,ASIN(SIN(M/5))*122+192,112+71*ASIN(SIN(M/3))EXEC.

2 টি ত্রিভুজ তরঙ্গ দিয়ে বলের অবস্থানটি মডেল করা যায় এবং স্মাইলব্যাসিকের মধ্যে আমি তাদের উত্পাদন করার সবচেয়ে কম উপায়টি ছিল অর্কসাইন (সাইন (এক্স))। (এমডির সাহায্যে অ্যালগরিদম দীর্ঘায়মান যেহেতু এসবি MODপরিবর্তে ব্যবহার করে %)


2

সিএসএস / এইচটিএমএল, 200 + 7 = 207 বাইট

p{position:relative}a{position:absolute;animation:infinite linear alternate;animation-name:x,y;animation-duration:7.9s,2.3s}@keyframes x{from{left:0}to{left:79ch}}@keyframes y{from{top:0}to{top:24em}}
<p><a>O

এই সংস্করণটি আপনাকে ক্যানভাসের আকার দেখায় এবং অ্যানিমেশনটিকে আরও পিক্সিলাটেড অনুভূতি দেয়:


2

ডায়ালগ এপিএল, 44 বাইট

{⎕SM∘←0,G←⍺+⍵⋄G∇⍵×1-2×⊃1 G∨.≥G⎕SD⊣⎕DL.1}⍨1 1

ব্যাখ্যা:

  • {...}⍨1 1 : প্রদত্ত ফাংশনটিকে ⍺ = ⍵ = 1 1 দিয়ে কল করুন
    • ⎕SM∘←0,G←⍺+⍵: স্টোর ⍺+⍵ইন G, উইন্ডোতে 0that অবস্থানে একটি প্রদর্শন করুন ⎕SM
    • ⎕DL.1: এক সেকেন্ডের 1/10 তম অপেক্ষা করুন
    • ⊃1 G∨.≥G⎕SD: উইন্ডো সীমানায় আছে কিনা Gতা পরীক্ষা করুন ⎕SM( 1≥Gবা G≥⎕SD, ⎕SDএটি কি এস ক্রেন ডি- ব্যাস)
    • 1-2×: মানচিত্রের [1,0]উপরে [¯1,1], ভ্রমণের দিকটি উল্টাতে
    • ⍵×: ভ্রমণের বর্তমান দিকটি তার দ্বারা বহুগুণ করুন
    • G∇: পুনরাবৃত্তি, আসুন Gনতুন অবস্থান ( ) এবং ⍵....নতুন দিক হতে দিন ( )।

এটি টার্মিনালগুলি চালুর সাথে সাথেই খোলার এবং বন্ধ করার কথা রয়েছে? এটি শুরু হওয়ার পরে এটি চালানো বন্ধ করা বেশ কঠিন, কারণ টার্মিনালটি সেকেন্ডের প্রতিটি দশম (কমপক্ষে উইন্ডোজে) বন্ধ হয়ে যায় এবং আবার খোলে।
Ren

1
@ wptreanor: স্থির
মেরিনাস

দুর্দান্ত, চমৎকার কাজ!
Ren

2

পিএইচপি, 112 97 94 103 102 বাইট

for(;;usleep(1e5),$i%=624)echo($r=str_repeat)(A^K,99),$r(A^a,abs($i%78-39)),O,$r(A^K,abs($i++%48-24));

Oউপরের ডান কোণে শুরু করে একটি 40x25 গ্রিডে মূলধনটি বাউন্স করে;
স্ক্রিনটি সাফ করার জন্য 99 টি নতুন লাইন প্রিন্ট করে।

সাথে চালাও -nr

A^K= chr(10)= নিউলাইন
A^a= chr(32)= স্পেস


1
হাই তিতাস আবার আমি। for($d=$e=-1;;usleep(1e5))echo($r=str_repeat)(A^K,99),$r(A^a,$x+=$d*=$x%79?1:-1),O,$r(A^K,$y+=$e*=$y%24?1:-1);। মডুলো 0 এবং এন এ মিথ্যা এবং দিকটি উল্টে দেয়। দুঃখজনকভাবে আমাদের ডিগ্রি করতে হবে। ডি এবং to ই থেকে -১ তবে এখনও কিছু সঞ্চয় পাবে। $x%79<=>.5একই বাইট জন্য কাজ করে।
ক্রিস্টোফ

1
আরে @ ক্রিসটফ আবার আপনাকে স্বাগতম। অদ্ভুত: আমি যখন আপনার জিনিসগুলি অনুলিপি করেছিলাম তখন এটি 110 এর পরিবর্তে 116 বাইট ছিল But তবে এটি আমাকে আরও ছোট করার কিছুতে অনুপ্রাণিত করেছিল।
টাইটাস

আমরা অবশ্যই একটি ভাল দল;) অনুলিপি করার বিষয়টির অনুলিপিটি সম্পর্কে আমার কোনও ধারণা নেই why
ক্রিস্টোফ

2

সিমোনস বেসিক (সি 64), 66 65 বাইট

একটি বাইট সংরক্ষিত ধন্যবাদ @ শানবিবার্সকে।

আমার এখানে কেবল একটি লাইন প্রয়োজন, কারণ সিমোনস বেসিকের একটি মডুলো ফাংশন রয়েছে।
আফিকা, এর জন্য একটি শারীরিক সি and64 এবং সিমোনস বেসিক মডিউল প্রয়োজন
(বা অন্য কোনও বেসিক এক্সটেনশনের একটি modফাংশন রয়েছে)।

0fori=0to623:print"{CLR}":poke1024+40*abs(mod(i,48)-24)+abs(mod(i,78)-39),81:next:goto

এই 69 টি অক্ষর টাইপ করুন:

0fOi=0TO623:?"{CLR}":pO1024+40*aB(mod(i,48)-24)+aB(mod(i,78)-39),81:nE:gO

{CLR}হয় PETSCII 147, যা পর্দা মুছে যায়। এটি টাইপ করতে Shift + সিএলআর / হোম ব্যবহার করুন।

bytecount

যখন ডিস্কে সংরক্ষিত, এটা 65 বাইট লাগে, কারণ কমান্ড tokenized করা হয়:
for, to, poke, abs, nextএবং gotoপ্রতিটি বাইট এক; modদুটি বাইট লাগে।
এটি কোডের 59 বাইট প্লাস 4 বাইট এবং পয়েন্টারগুলির জন্য 2 বাইট এবং লাইন নম্বরটির জন্য 2 বাইট করে।

রেফারেন্সের জন্য, সি 64 ম্যাপিং দেখুন এবং $800(বেসিক প্রোগ্রাম পাঠ্য) সন্ধান করুন।
(আপনি এখানে ভিডিও স্ক্রিন মেমরির অঞ্চলটি খুঁজে পেতে পারেন $400))

ভাঙ্গন

প্রোগ্রামটি I0 থেকে 623 (= 48 এর LCM এবং 78 বিয়োগ 1) থেকে লুপ হয়। লুপে

  • পর্দা সাফ করা হয়
  • I যথাক্রমে 24..0..23 এ 39..0..38 এ ম্যাপ করা হয়
  • এবং ব্লবটি (পিইটিএসসিআইআই 81) ভিডিও মেমোরিতে
    (মূল প্রোগ্রামটি যেমন করে) একই স্থানে স্থাপন করা হয় ।

লুপটি শেষ হয়ে গেলে 0 লাইনে জাম্পিং করে প্রোগ্রামটি পুনরায় আরম্ভ করা হয়।

সি 64 বেসিক, 77 76 বাইট

0fori=0to623:print"{CLR}"
1poke1024+40*abs(i-48*int(i/48)-24)+abs(i-78*int(i/78)-39),81:next:goto

দুর্ভাগ্যক্রমে আমার দুটি লাইন দরকার, কারণ সমস্ত সম্ভাব্য সংক্ষিপ্তসার সহ এটিতে 83 টি অক্ষর লাগবে - C64 লাইন সম্পাদকটি ব্যবহার করতে অনেক বেশি:

0fOi=0to623:?"{CLR}":pO1024+40*aB(i-48*int(i/48)-24)+aB(i-78*int(i/78)-39),81:nE:gO

(একটি হেক্স সম্পাদক একটি দীর্ঘ লাইন তৈরি করতে ব্যবহৃত হতে পারে - যা এটি 73 বাইট তৈরি করে))


1
কমোডোর কমান্ড :;
বিভাজকরা

1
এছাড়াও আপনি যদি শূন্যরেখায় শুরু করেন তবে আপনি সহজেই ব্যবহার করতে পারেন goto বেসিক 2gotogoto 0
শান বেবিবার

আপনি যদি নিজের সি 64 বেসিক তালিকার আরও কমান্ড পেতে চান তবে 128 মোডে এটি সি 128 এ প্রবেশ করুন, এটি ডিস্কে সংরক্ষণ করুন এবং এটি আবার সি 64 মোডে লোড করুন, সি 128 এর ডিফল্ট হিসাবে 160 অক্ষরের সীমা রয়েছে তাই এই বাধাটি ভেঙে যেতে পারে কমোডোর কীওয়ার্ড সংক্ষেপণ ব্যবহার করে।
শন বেবারস

পছন্দ করেছেন তাই দীর্ঘ হয়েছে. আমি এটি মেশিন কোডেও প্রয়োগ করতে চেয়েছিলাম ... কার্নেলের রুটিনগুলি পুনরুদ্ধার করার চেষ্টা করছি; নিশ্চিত নেই যে কখন আমাকে রেজিস্ট্রেশন করবে ব্যাকআপ করতে হবে; সম্পূর্ণ কার্নেল তালিকা অনলাইনে রয়েছে ; আমি আরও খনন করতে সময় নিতে পারি না। আপনি সম্পূর্ণ করতে চান এই ?
তিতাস

আমি একটি এমসির সংস্করণ তৈরি করতে যাচ্ছিলাম, যদিও আমি মনে করি এটি আমার নিজের চ্যালেঞ্জের কাছে জমা দেওয়া এমনকি আমার পক্ষে অতিরিক্ত উপভোগযোগ্যও হবে। দ্রুততম উপায়টি হ'ল এ থেকে স্ক্রিনে সরাসরি বাইটটি লেখা$0400 থেকে $07e7; বা sprites ব্যবহার করুন। কার্নাল দিয়ে $ffd2(আউটপুট অ্যাকসুলেটর) ব্যবহার করে আপনি কার্সারে খুব সহজেই এক্স এবং ওয়াই পোজ সেট করতে সক্ষম হবেন (এটির জন্য আমি কলটি মনে করি না) তবে এটি কার্যকর হওয়ার ক্ষেত্রে আপনাকে শেষ চরিত্রের অবস্থানটি এড়াতে হতে পারে একটি লাইন ফিড
শান বেবারস

1

পাইথন 2, 176 168 বাইট

এটি 80x24 এর একটি টার্মিনাল আকার ধারন করে। অবশ্যই অনুকূল নয় তবে আমি গল্ফিংয়ে নতুন তাই হ্যাঁ।

import time;x=y=d=e=1
while 1:
 m=[[' 'for i in' '*80]for j in' '*24];x+=d;y+=e;m[y][x]='O';time.sleep(.1)
 if x%79<1:d=-d
 if y%23<1:e=-e 
 for r in m:print''.join(r)

X. 1or x> 79 এর পরিবর্তে x% 79 <1 এবং y এর জন্য ditto প্রস্তাব দেওয়ার জন্য আর কাপের জন্য ধন্যবাদ।


আপনি প্রতিস্থাপন কয়েক বাইট সংরক্ষণ করতে পারবেন x<1or x>78সঙ্গে x%79<0এবং y<1or y>22সঙ্গে y%23<1
আর কাপ

1

রিবোল / ভিউ, 284 266 বাইট

rebol[]p: 3x9 d:[3 3]view layout[b: box blue 99x99 effect[draw[circle p 2]]rate :0.01 feel[engage: func[f a e][if a = 'time[case/all[p/x < 2[d/1: abs d/1]p/y < 2[d/2: abs d/2]p/x > 98[d/1: negate d/1]p/y > 98[d/2: negate d/2]]p/x: p/x + d/1 p/y: p/y + d/2 show b]]]]

Ungolfed:

rebol []

p: 3x9     ;; starting position
d: [3 3]   ;; direction

view layout [
    b: box blue 99x99 effect [
        draw [
            circle p 2
        ]
    ]

    rate :0.01 feel [
        engage: func [f a e] [
            if a = 'time [
                case/all [
                    p/x < 2  [d/1: abs d/1]
                    p/y < 2  [d/2: abs d/2]
                    p/x > 98 [d/1: negate d/1]
                    p/y > 98 [d/2: negate d/2]
                ]
                p/x: p/x + d/1
                p/y: p/y + d/2
                show b
            ]
        ]
    ]
]

1

সি 294 বাইট

#include<graphics.h> f(){int d=0;g,x,y,a=0,b=0;initgraph(&d,&g,NULL);x=30;y=30;while(1){x+=6;y+=7;if(y<60)b=0;if(x<60)a=0;if((y>getmaxy()-40)) b=!b;if((x>getmaxx()-40))a=!a;if(b){y-=18;x+=3;}if(a){x-=15;y+=2;}usleep(10000);setcolor(4);cleardevice();circle(x, y,30);floodfill(x,y,4);delay(45);}}

অবরুদ্ধ সংস্করণ:

#include<graphics.h>
void f()
{
 int d=DETECT,g,x,y,r=30,a=0,b=0;
 initgraph(&d,&g,NULL);
 x=30;
 y=30;

 while(1)
 {
   x+=6;
   y+=7;

   if(y<60)
     b=0;
   if(x<60)
     a=0;     

   if((y>getmaxy()-40))
        b=!b;

   if((x>getmaxx()-40))
        a=!a;

    if(b)
    {       
        y-=18;
        x+=3;
    }

    if(a)
    {       
       x-=15;
       y+=2;               
    } 
    usleep(10000);
    setcolor(RED);
    cleardevice();
    circle(x,y,r);
    floodfill(x,y,RED);
    delay(45);

  }   

}

ব্যাখ্যা

  • সুতরাং এটি দিয়ে শুরু করতে, আমাকে graphics.hআমার /usr/includeডিরেক্টরিতে যেতে হয়েছিল । সুতরাং, আমি অনুসন্ধান এবং এটি আমি কি পাওয়া যায়। এটি লিনাক্সের জন্য এসডিএল ব্যবহার করে একটি টার্বোসি গ্রাফিক্স বাস্তবায়ন। একটি ওপেনজিএল ব্যবহার করতে পারে। উইন্ডোজগুলিতে, আমার ধারণা এটি ইতিমধ্যে ইনস্টল করা আছে, ম্যাকওএস সম্পর্কে নিশ্চিত নয়।
  • void initgraph(int *graphdriver, int *graphmode, char *pathtodriver);সিস্টেমটি আরম্ভ করে এবং এটিকে গ্রাফিক্স মোডে রাখে, এই ক্ষেত্রে গ্রাফিক্স ড্রাইভার স্বয়ংক্রিয়ভাবে সনাক্ত হয়ে যায়। এই লিঙ্কটি দেখুন দয়া করেআরও তথ্যের জন্য দেখুন।
  • x এবং y স্থানাঙ্ক যা বলের অবস্থান নির্ধারণ করে।
  • aএবং bপতাকাগুলি হয়, aশূন্যতে সেট করা হয় যখন xমানটি 60 এর নিচে নেমে যায় এবং bযখন শূন্যতে সেট থাকেy 60 এর নীচে নেমে ।
  • পতাকাগুলি কখন xএবং টগল করা হয়y উইন্ডোর সীমানা মান অতিক্রম করে, এবং স্থানাঙ্ক তদনুসারে সুসমন্বিত করা হয়।
  • usleepআমার সিপিইউ যাতে চাপ না দেয় সেজন্য আমি এমন একটি রেখেছি।
  • closegraph()উইন্ডোটি বন্ধ করার জন্য সাধারণত একটি কল ব্যবহার করা উচিত । তবে এটি এখানে অনুপস্থিত।

লিঙ্কার পতাকা সহ সংকলন করতে হবে -lgraph

এটি রিয়েল হার্ডওয়ারে স্মুথ চালায়। :)

বাউন্ডিং রেড বল


এই প্রোগ্রামটি চালানোর জন্য কি আমদানি বিবৃতিগুলি প্রয়োজনীয়?
ক্রিটসি লিথোস

@ ক্রিতিক্সিলিথোস হ্যাঁ স্যার; আপডেট করা হয়েছে! আপনি অন্তর্ভুক্ত করা প্রয়োজন graphics.h। এই উত্তরটি জিজ্ঞাসাবাবু / প্রশ্ন / ৫২৫০৫১/২ সহায়ক ছিল।
আবেল টম

1

এমএটিএল , 42 বাইট

1thXH_XI`Xx8E70hZ"79HZ}&(DH4M\1>EqI*XIH+XH

এটি একটি 70 × 16 স্ক্রিন এবং চরিত্র ব্যবহার করে O। আপনি যদি কিছু বাউন্স অপেক্ষা করেন তবে আপনি বলটি একটি কোণে আঘাত করতে দেখবেন।

এমএটিএল অনলাইনে চেষ্টা করুন!

স্ক্রিনের আকারটি সহজেই কোডটিতে পরিবর্তন করা যায়। প্রাসঙ্গিক অংশটি 8E70, যা ধাক্কা দেয় 8, এটিকে দ্বিগুণ করে এবং ধাক্কা দেয় 70। উদাহরণস্বরূপ, একটি 80 × 25 এর জন্য স্ক্রিন প্রতিস্থাপন করে 5W80, যা ধাক্কা দেয় 5, স্কোয়ার করে এবং ধাক্কা দেয় 80(বা এর দ্বারা প্রতিস্থাপন করে 25 80তবে এর জন্য আরও একটি বাইট প্রয়োজন)।

এছাড়াও, tDকোডের শেষে যুক্তটি রিয়েল টাইমে বর্তমান অবস্থানটি দেখায় (উল্লম্ব, পরে অনুভূমিক, 1 1উপরের বাম দিকে)। উদাহরণ হিসাবে, একটি 80×18পর্দার জন্য,

1thXH_XI`Xx9E80hZ"79HZ}&(DH4M\1>EqI*XIH+XHtD

এটিও চেষ্টা করে দেখুন!

ব্যাখ্যা

এটি একটি অসীম লুপ ব্যবহার করে। অবস্থানটি ক্লিপবোর্ডে H1 × 2 ভেক্টর Iহিসাবে রাখা হয় এবং দিকটি ক্লিপবোর্ডে 1 × 2 ভেক্টর হিসাবে এন্ট্রি সহ 1বা রাখে -1

প্রতিটি পুনরাবৃত্তি স্ক্রিনটি সাফ করে, একটি স্পেসের ম্যাট্রিক্স সংজ্ঞায়িত করে, Oপ্রাসঙ্গিক অবস্থানে একটি লিখে , এবং এটি প্রদর্শন করে। তারপরে পজিশন এবং ডাইরেক্টিও আপডেট করতে হবে।

অবস্থান- 1ভিত্তিক, এবং এইভাবে পর্দার প্রান্তগুলি হয় 1এবং সর্বাধিক পর্দার আকার। সুতরাং যদি অবস্থানের মডুলো স্ক্রীন আকার দেয় 0বা 1প্রথম বা দ্বিতীয় উপাদানগুলির মধ্যে হয় যার অর্থ আমরা যথাক্রমে একটি উল্লম্ব বা অনুভূমিক প্রান্তে পৌঁছেছি, দিক ভেক্টরের সেই উপাদানটি উপেক্ষিত। এর পরে, নতুন অবস্থানটি পাওয়ার জন্য নতুন অবস্থানটি বর্তমান অবস্থানে যুক্ত করা হয়।


1

এখানে জেডএক্স স্পেকট্রামের তালিকা রয়েছে।

  10 FOR n=0 to 7
  20 READ a: POKE USR "a"+n, a
  30 NEXT n
  40 DATA 60,126,243,251,255,255,126,60
  50 LET x=10:LET y=10:LET vx=1: LET vy=1
  60 PRINT AT y,x;"\a"
  70 IF x<1 OR x>30 THEN LET vx=-vx
  80 IF y<1 OR x>20 THEN LET vy=-vy
  90 LET x=x+vx: LET y=y+vy
 100 PRINT AT y-vy,x-vx;" ": GO TO 60

চমৎকার প্রথম এন্ট্রি ড্রলবি - আপনি দয়া করে একটি বাইট গণনা অন্তর্ভুক্ত করতে পারেন। আমি ধরে নিয়েছি এটি 16 কে মেশিন সহ কোনও স্পেসিফিকেশনে কাজ করবে?
শন বেবারস

হাই এটি 201 বাইট, আপনি প্রথম 4 টি লাইন বাদ দিতে পারেন তবে তারপরে আপনি কেবল একটি বাউন্সিং "একটি" অক্ষর পাবেন তবে এটি আপনাকে 64 বাইট সংরক্ষণ করে। আমি অপ্টিমাইজ করার চেষ্টা করব। এটি
মোটেও

ঠিক আছে আমি বল গ্রাফিক্স বাদ না দিয়ে কিছুটা লাইন ঘনীভূত করে 185 কে কেটে ফেলতে পেরেছি। এটি যদিও কিছুটা কম পঠনযোগ্য তবে এটি দ্রুত।
DrIB

1

সি + অভিশাপ, 190 বাইট

#include<curses.h>
w;h;x;y;d;main(e){initscr();curs_set(0);getmaxyx(stdscr,h,w);for(d=e;;usleep(20000),mvaddch(y,x,32)){mvaddch(y+=d,x+=e,48);if(!y||y>h-2)d=-d;if(!x||x>w-2)e=-e;refresh();}}

ব্যাখ্যা:

#include<curses.h>
w;h;x;y;d;
main(e)
{
    initscr();
    curs_set(0);
    getmaxyx(stdscr,h,w);

    // initialize distances to 1 (e is 1 when called without arguments)
    // wait for 1/5 second, then write space character at current pos
    for(d=e;;usleep(20000),mvaddch(y,x,32))
    {
        // advance current pos and write ball character (`0`)
        mvaddch(y+=d,x+=e,48);

        // check and change direction:
        if(!y||y>h-2)d=-d;
        if(!x||x>w-2)e=-e;

        // trigger output to screen:
        refresh();
    }
}

1

লুয়া ( LDV 2D ), 130 বাইট

x,y,a,b=0,0,1,1
function love.draw()a=(x<0 or x>800)and-a or a
b=(y<0 or y>600)and-b or b
x=x+a
y=y+b
love.graphics.points(x,y)end

কোড গল্ফের কথা বলতে গেলে লুয়া সেরা ভাষা নয়, তবে আপনি এখানে যান! কয়েকটি বিষয় উল্লেখযোগ্য:

  • ডিফল্ট ক্যানভাস আকার ৮০০ x is০০।

  • love.draw()LÖVE এর অঙ্কন ফাংশন এবং এটির একটি পূর্বনির্ধারিত নাম রয়েছে। বিকল্প LÖVE যেগুলি ব্যবহার করা যেতে পারে তা হ'ল love.update(dt)এবং love.run()- প্রথমটি দীর্ঘতর, বাইটে এবং পরবর্তীটি সংক্ষিপ্ত, হ্যাঁ, তবে অন্তর্নির্মিত অসীম লুপ ছাড়াই। সুতরাং, draw()এখানে আমাদের সেরা বাজি বলে মনে হচ্ছে।

  • উপরের সংস্করণটি love.graphics.pointsবল আঁকতে ব্যবহার করে। যদিও আরও খাটো, আমি নিশ্চিত এটির অনুমোদিত কিনা। এটি কীভাবে চলে তার একটি GIF এখানে দেওয়া হয়েছে:

Animated screenshot - point

আপনি দেখতে পাচ্ছেন (বা নাও পারেন), পর্দায় একটি একক পিক্সেল চলেছে। যদিও এটি বাইটস সংরক্ষণ করে, ফলাফলের মধ্যে এটি সবচেয়ে সন্তোষজনক নয়।

সুতরাং আমি একটি বিকল্প 131 বাইট সমাধান তৈরি করেছি :

x,y,a,b=0,0,1,1
function love.draw()a=(x<0 or x>795)and-a or a
b=(y<0 or y>595)and-b or b
x=x+a
y=y+b
love.graphics.print(0,x,y)end

এটি একটিকে ব্যবহার করে love.graphics.print- যা পাঠ্য মুদ্রণ করে - এবং 0একটি বল হিসাবে এটি আরও বেশি দৃশ্যমান এবং আবেদনময়ী করে তোলে।

Animated screenshot - zero


1

চিপ -8, 36 34 28 বাইট

FF29 'LDF I,vF //load digit sprite for the value of vF (should be 0)

4000 'SNE v0,0 //if x is 0...
6201 'LD v2,1 //set x velocity to 1
403C 'SNE v0,3C //if x is 3C...
62FF 'LD v2,FF //set x velocity to -1
4100 'SNE v1,0 //if y is 0...
6301 'LD v3,1 //set y velocity to 1
411B 'SNE v1,1B //if y is 1B...
63FF 'LD v3,FF //set y velocity to -1

D015 'DRW v0,v1,5 //draw sprite
D015 'DRW v0,v1,5 //draw sprite again to clear it.
8024 'ADD v0,v2 //add x velocity to x
8134 'ADD v1,v3 //add y velocity to y

1202 'JMP 202 //jump to second instruction

এখানে অভিনব কৌশল নেই ...

এমন একজন দোভাষীর প্রয়োজন যা স্প্রিটগুলি সঠিকভাবে আঁকেন (ফ্রেম প্রতি কেবল একটি স্প্রাইট আঁকতে পারে, যা প্রোগ্রামটি এটি দেখতে সক্ষম হওয়ার জন্য পর্যাপ্ত করে তোলে)।

নিম্নমানের ভিডিও


0

জেডএক্স স্পেকট্রাম বেসিক - 179 বাইট

এখানে এটি সামান্য বিস্মৃত হয়। এটি বলের গ্রাফিক্স সহ 179 বাইট রয়েছে

  10 LET a=10: LET b=10: LET c=1: LET d=-1: FOR e=0 TO 7: READ f: POKE USR "a"+e, f: NEXT e
  20 DATA 60, 126,243,251,255,255,126,60
  30 PRINT AT b,a;"\a"
  40 IF a<1 OR a>30 THEN LET c=-c
  50 IF b<1 OR b>20 THEN LET d=-d
  60 LET a=a+c: LET b=b+d: PRINT AT b-d, a-c;" ": GO TO 30

দয়া করে উত্তরের জন্য ব্যবহৃত মার্ক আপটি দেখুন, এছাড়াও অক্ষরটি ব্যবহার করে oবা Oআপনি প্রতীকী তালিকায় কিছু বাইট সংরক্ষণ করতে সক্ষম হতে পারেন; একই প্রশ্নের পুনরায় জবাব দেওয়ার চেয়ে সমাধানগুলি উন্নত করার পরে আপনি পূর্ববর্তী উত্তরগুলি সম্পাদনা করতে সক্ষম হবেন
শন বেবারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.