Skip to content

PaintLine-42 #165

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
49 changes: 49 additions & 0 deletions problem-set/PaintLine.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* File: PaintLine.java
* ----------------------------
* Paint-ის მონაკვეთის ხატვის გაკეთება, ჯერ აჭერ მაუსს, ფიქსირდება ერთი წვერო, მერე
* მაუსის მოძრაობისას მონაკვეთიც მოძრაობს რადგან მეორე წვერო არაა დაფიქსირებული და
* კლიკით ფიქსირდება მეორე წვეროც.
*/

import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;

public class PaintLine extends GraphicsProgram {


private boolean startClicked;
private boolean endClicked;
private GLine line;

//in the start there are no points clicked.
//adding mouse listeners.
public void init() {
startClicked = false;
endClicked = false;
addMouseListeners();
}

//if starting point isn't clicked yet and user clicked it now,
//add add line on those coordinates.
//else if end point isn't clicked yet and user clicked it,
//mark its boolean as true.
public void mouseClicked(MouseEvent e) {
if (!startClicked) {
line = new GLine(e.getX(), e.getY(), e.getX(), e.getY());
add(line);
startClicked = true;
} else if (!endClicked) {
endClicked = true;
}
}

//if starting point has already set, update line ending point
//to show that line ending point is moving with cursor.
public void mouseMoved(MouseEvent e) {
if (startClicked && !endClicked)
line.setEndPoint(e.getX(), e.getY());
}

}
11 changes: 11 additions & 0 deletions problem-set/PaintLine.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# PaintLine

პრობლემა:
```
Paint-ის მონაკვეთის ხატვის გაკეთება, ჯერ აჭერ მაუსს, ფიქსირდება ერთი წვერო, მერე
მაუსის მოძრაობისას მონაკვეთიც მოძრაობს რადგან მეორე წვერო არაა დაფიქსირებული და
კლიკით ფიქსირდება მეორე წვეროც.
```

## პრობლემის გადაჭრის გზა
გავაკეთოთ `boolean` ტიპის ცვლადები, რომლებიც შეინახავენ ინფორმაციას იმის შესახებ, დავაფიქსირეთ თუ არა დასაწყისი და საბოლოო წერტილი, ასევე აღვწეროთ მონაკვეთიც, `GLine` ტიპის ობიექტი. თავდაპირველად, რა თქმა უნდა, ორივე ცვლადის მნიშნველობაა `false`. მაუსზე დაკლიკვის შემთხვევაში, უნდა შევამოწმოთ, რომელი წერტილი დაფიქსირდა. იმ შემთხვევაში თუ საწყისი წერტილისთვის განკუთვნილი ცვლადის `startClicked`-ის მნიშვნელობაა `false`, ნიშნავს, რომ ახლა ხდება საწყისი წერტილის არჩევა. კლიკის შემთხვევაში კანვასზე დავამატოთ აღწერილი მონაკვეთი საწყისი და საბოლოო ერთი და იმავე კოორდინატებით, კლიკის ადგილზე. ახლა უკვე უნდა ავსახოთ მონაკვეთი, რომელიც იმოძრავებს კურსორთან ერთად. ეს ხდება მხოლოდ იმ შემთხვევაში, როცა საწყისი წერტილი დაფიქსირებულია, ხოლო საბოლოო არა, სწორედ ასეთ დროს `mouseMoved` მეთოდში თანდათან ვცვალოთ მონაკვეთის მეორე ბოლოს კოორდინატები. იმ შემთხვევაში თუ კლიკი მოხდა, `startClicked`-ის მნიშვნელობაა `true`, ხოლო `endClicked`-ის მნიშვნელობაა `false`, ნიშნავს, რომ ფიქსირდება საბოლოო წერტილი. შესაბამისად შევცვლით ცვლადის მნიშვნელობას და მონაკვეთი გაჩერდება შესაბამის პოზიციაზე `mouseMoved` მეთოდში დაწერილი კოდის მიხედვით.