Skip to content

Drop ball #99 #158

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions problem-set/DropBall.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
29 changes: 29 additions & 0 deletions problem-set/DropBall.md
Original file line number Diff line number Diff line change
@@ -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` ამოეგდო.
Binary file added problem-set/Opening Project.mp4
Binary file not shown.
19 changes: 19 additions & 0 deletions problem-set/OpeningProject.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
${\text{\color{silver} პრობლემა: }}$

ეკლიფსში პროექტის გახსნის ინსტრუქცია და პროგრამის გაშვება

${\text{\color{silver} პრობლემის გადაჭრის გზა: }}$

${\text{\color{silver} \small პროექტის გახსნა: }}$
1. გადმოვწეროთ პროექტი, რომლის გახსნაც გვინდა
2. ჩავრთოთ ეკლიფსი
3. დავაჭიროთ მოცემულ ღილაკს <img src="./images/Import Project.png" style="width:1.6rem; vertical-align:middle; margin-left:5px">
4. Select root directory-ის გასწვრივ დავაჭიროთ Browse და ავირჩიოთ გადმოწერილი პროექტი
5. დავაჭიროთ Finish ღილაკს და მარცხენა მხარეს დავინახავთ დამატებულ პროექტს

${\text{\color{silver} \small პროგრამის გაშვება: }}$
1. დავაჭიროთ მოცემულ ღილაკს <img src="./images/Run (Select Class).png" style="width:1.6rem; vertical-align:middle; margin-left:5px">
2. ავირჩიოთ ის კლასი, რომლის გაშვებაც გვინდა და დავაწვეთ Ok-ის
3. ასე და ამგვარად ჩვენი პროგრამაც გაეშვება

${\text{\color{#f08080}\small დეტალური ინფორმაციისთვის იხილეთ: \color{#e55555}{Opening Project.mp4}}}$
Binary file added problem-set/images/Import Project.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added problem-set/images/Run (Select Class).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.