diff --git a/problem-set/DropBall.java b/problem-set/DropBall.java new file mode 100644 index 0000000..7aa2d7c --- /dev/null +++ b/problem-set/DropBall.java @@ -0,0 +1,45 @@ +/* + * File: DropBall.java + * ---------------------------- + * This program is a stub for the DropBall problem. + */ + +import java.awt.Color; +import java.awt.event.MouseEvent; + +import acm.graphics.GOval; +import acm.program.*; + +public class GraphicsProgramSample extends GraphicsProgram { + /** Variables */ + private static final int BALL_RADIUS = 25; + private GOval ball; + + public void run() { + ball = createBall(BALL_RADIUS, Color.BLACK); + addMouseListeners(); + while (true) { + ball.move(0, 2); + pause(10); + } + } + + /** + * Create and return GOval object according its arguments + * + * @param radius type - integer, radius of the circle + * @param c type - Color, color of the circle + * @return type - GOval, the circle + */ + private GOval createBall(int radius, Color c) { + GOval circle = new GOval(2 * BALL_RADIUS, 2 * BALL_RADIUS); + circle.setFilled(true); + circle.setFillColor(c); + return circle; + } + + public void mousePressed(MouseEvent event) { + add(ball, event.getX() - BALL_RADIUS, event.getY() - BALL_RADIUS); + } + +} diff --git a/problem-set/DropBall.md b/problem-set/DropBall.md new file mode 100644 index 0000000..1190074 --- /dev/null +++ b/problem-set/DropBall.md @@ -0,0 +1,29 @@ +${\text{\color{silver} პრობლემა: }}$ + +მაუსის კლიკზე იმავე ადგილზე ჩნდება ბურთი და იწყებს ვარდნას ძირს, თუ მაუსს სხვა +ადგილზე ვაკლიკებ ბურთი გადადის ახალ ადგილზე და იქედან იწყებს ვარდნას + +${\text{\color{silver} პრობლემის გადაჭრის გზები: }}$ + +1. თავდაპირველად, ფიქრის ლოგიკური პროცესი შემდეგნაირია: პირველ დაკლიკებაზე უნდა შევქმნათ ბურთი, რომელიც სულ დაბლა ეცემა და ყოველ ახალ დაკლიკებაზე წინა ბურთი ახალ პოზიციაზე გადავიყვანოთ. ასეთ მიდგომას დასჭირდება რაიმე `boolean` ცვლადი, რომელიც გვეტყვის ბურთი შექმნილია თუ არა. +```java +private boolean isBallCreated = false; + +public void mousePressed(MouseEvent event) { + if(isBallCreated == false){ + add(ball, event.getX()-BALL_RADIUS, event.getY()-BALL_RADIUS); + isBallCreated = true; + }else{ + ball.setLocation(event.getX()-BALL_RADIUS, event.getY()-BALL_RADIUS); + } +} +``` +2. იდეაში შესაძლებელია ამ კოდის კიდევ უფრო შემცირება. როდესაც ობიექტი უკვე დამატებულია კანვასზე, მისი ახლიდან დამატების შემთხვევაში ობიექტი უბრალოდ პოზიციას იცვლის ახალ კოორდინატებზე (ანუ ზუსტად იმას აკეთებს რაც გვინდა). ეს განპირობებულია იმით, რომ გრაფიკს პროგრამამ უნდა აღრიცხოს ყველა ობიექტის, რომლებიც ჰიპში არიან შექმნილნი, ადგილმდებარეობა, რათა შემდგომ `getElementAt()`-ის გამოყენება შეგვეძლოს. რადგან ერთ ობიექტს ორი მისამართი ვერ ექნება (ალოგიკური იქნება) ამიტომაც არ იხატება ახლიდან კანვასზე ბურთი. + +$\scriptsize \it იხ. \ კოდი \ DropBall.java \ ფაილში.$ + +${\text{\color{#e55555}{შენიშვნა}}}$ + +1. აუცილებელია `GOval`-ის გარეთ განსაზღვრა, რათა `mousePressed`-მა დააფიქსიროს. +2. უმჯობესია `mouseClicked`-ის ნაცვლად `mousePressed` გამოვიყენოთ, რადგან უფრო ეფექტურად აფიქსირებს კლიკებს. +3. `addMouseListeners` ბურთის ინიციალიზაციის მერე უნდა გვეწეროს, წინააღმდეგ შემთხვევაში შესაძლებელი იქნებოდა `nullpointerexception` ამოეგდო. \ No newline at end of file diff --git a/problem-set/Opening Project.mp4 b/problem-set/Opening Project.mp4 new file mode 100644 index 0000000..a4e0ff8 Binary files /dev/null and b/problem-set/Opening Project.mp4 differ diff --git a/problem-set/OpeningProject.md b/problem-set/OpeningProject.md new file mode 100644 index 0000000..799e26d --- /dev/null +++ b/problem-set/OpeningProject.md @@ -0,0 +1,19 @@ +${\text{\color{silver} პრობლემა: }}$ + +ეკლიფსში პროექტის გახსნის ინსტრუქცია და პროგრამის გაშვება + +${\text{\color{silver} პრობლემის გადაჭრის გზა: }}$ + +${\text{\color{silver} \small პროექტის გახსნა: }}$ +1. გადმოვწეროთ პროექტი, რომლის გახსნაც გვინდა +2. ჩავრთოთ ეკლიფსი +3. დავაჭიროთ მოცემულ ღილაკს +4. Select root directory-ის გასწვრივ დავაჭიროთ Browse და ავირჩიოთ გადმოწერილი პროექტი +5. დავაჭიროთ Finish ღილაკს და მარცხენა მხარეს დავინახავთ დამატებულ პროექტს + +${\text{\color{silver} \small პროგრამის გაშვება: }}$ +1. დავაჭიროთ მოცემულ ღილაკს +2. ავირჩიოთ ის კლასი, რომლის გაშვებაც გვინდა და დავაწვეთ Ok-ის +3. ასე და ამგვარად ჩვენი პროგრამაც გაეშვება + +${\text{\color{#f08080}\small დეტალური ინფორმაციისთვის იხილეთ: \color{#e55555}{Opening Project.mp4}}}$ \ No newline at end of file diff --git a/problem-set/images/Import Project.png b/problem-set/images/Import Project.png new file mode 100644 index 0000000..1a282ef Binary files /dev/null and b/problem-set/images/Import Project.png differ diff --git a/problem-set/images/Run (Select Class).png b/problem-set/images/Run (Select Class).png new file mode 100644 index 0000000..9df45d7 Binary files /dev/null and b/problem-set/images/Run (Select Class).png differ