Last active
March 2, 2020 04:52
-
-
Save TheBrenny/e2035b8dea9e9a2914ebf52b9f2d8f6a to your computer and use it in GitHub Desktop.
VSCode vs Eclipse Formatting
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
<profiles version="13"> | |
<profile kind="CodeFormatterProfile" name="Jarod" version="13"> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/> | |
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/> | |
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/> | |
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/> | |
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="do not insert"/> | |
</profile> | |
</profiles> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Color; | |
import java.awt.Dimension; | |
import java.awt.Font; | |
import java.awt.FontMetrics; | |
import java.awt.Graphics; | |
import java.awt.event.ActionEvent; | |
import java.awt.event.ActionListener; | |
import java.awt.event.ItemEvent; | |
import java.awt.event.ItemListener; | |
import java.util.ArrayList; | |
import java.util.Random; | |
import javax.swing.JButton; | |
import javax.swing.JCheckBox; | |
import javax.swing.JLabel; | |
import javax.swing.JPanel; | |
/** | |
* The SnowPanel is what actually <em>IS</em> the game. It holds the main update | |
* and draw functions and is actually what shows inside of the frame in | |
* {@link SnowDriver}. | |
* | |
* @author z5217759 - Jarod Brennfleck | |
* @assessmentItem Assignment 3 | |
* @date 17 Aug. 2019 | |
*/ | |
public class SnowPanel extends JPanel { | |
private static final long serialVersionUID = 65752066642573530L; | |
public static final int GAME_STATE_NOT_STARTED = -1; | |
public static final int GAME_STATE_STARTED = 0; | |
public static final int GAME_STATE_WIN = 1; | |
public static final int GAME_STATE_LOSE = 2; | |
public static final float CATCHER_SPEED = 15; | |
public static final long DEFAULT_SPAWN_RATE = 4000; | |
public static final long SPAWN_RATE_DECAY = 125; | |
public static final Color DEFAULT_FLAKE_COLOR = Color.WHITE; | |
public static final Color DEFAULT_CATCHER_COLOR = Color.WHITE; | |
public static final Color DEFAULT_BOARD_COLOR = Color.BLUE; | |
public static final Dimension BOARD_SIZE = new Dimension(500, 400); | |
public static final Font GAME_FONT = new Font("Roboto", Font.BOLD | Font.ITALIC, 20); | |
private JPanel btnPanel; | |
private JLabel scoreLabel; | |
private FontMetrics fontMets; | |
private int boardTop = 80; | |
private int boardBottom; | |
private int boardLeft = 0; | |
private int boardRight; | |
private ArrayList<SnowFlake> allFlakes; | |
private float catchX; | |
private float catchY; | |
private float catchWidth = 40; | |
private float catchHeight = 20; | |
private float catchSpeed = CATCHER_SPEED; | |
private int gameState = GAME_STATE_NOT_STARTED; | |
private float score = 0; | |
private float highScore = score; | |
private long spawnRate = DEFAULT_SPAWN_RATE; | |
private long lastSpawn = 0; | |
private boolean colorChangeMode = false; | |
public SnowPanel() { | |
allFlakes = new ArrayList<SnowFlake>(); | |
createPanel(); | |
createSnowGame(); | |
fontMets = getFontMetrics(GAME_FONT); | |
} | |
public void createPanel() { | |
ActionListener al = new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
float catcherMovement = 0; | |
String cmd = e.getActionCommand(); | |
if(cmd.equals("left1")) catcherMovement -= 1; | |
else if(cmd.equals("left2")) catcherMovement -= 2; | |
else if(cmd.equals("left3")) catcherMovement -= 3; | |
else if(cmd.equals("right1")) catcherMovement += 1; | |
else if(cmd.equals("right2")) catcherMovement += 2; | |
else if(cmd.equals("right3")) catcherMovement += 3; | |
else if(cmd.equals("reset")) { | |
if(getGameState() == GAME_STATE_WIN || getGameState() == GAME_STATE_LOSE) { | |
resetGame(); | |
} | |
} else if(cmd.equals("start")) { | |
if(getGameState() == GAME_STATE_NOT_STARTED) { | |
startGame(); | |
} | |
} | |
moveCatcher(catcherMovement); | |
// one line clamp statement. | |
// is the exact same as: | |
// if((catchX - catchWidth / 2) <= 0) catchX = catchWidth / 2; | |
// else if((catchX + catchWidth / 2) >= boardRight) catchX = boardRight - | |
// catchWidth / 2; | |
/* | |
* I won't `repaint()` here because that will change the frame | |
* rate! Although | |
* minutely, it will still happen!!! | |
*/ | |
} | |
}; | |
scoreLabel = new JLabel(); | |
updateScoreString(); | |
btnPanel = new JPanel(); | |
btnPanel.setPreferredSize(new Dimension(BOARD_SIZE.width, 40)); | |
btnPanel.setBackground(Color.blue); | |
// This method is more extensible and easier to manage. | |
//@formatter:off | |
String[][] btns = { | |
{"<<<", "left3"}, | |
{"<<", "left2"}, | |
{"<", "left1"}, | |
{"Reset", "reset"}, | |
{"Start", "start"}, | |
{">", "right1"}, | |
{">>", "right2"}, | |
{">>>", "right3"} | |
}; | |
//@formatter:on | |
JButton btnTmp; | |
for(int btn = 0; btn < btns.length; btn++) { | |
btnTmp = new JButton(btns[btn][0]); | |
btnTmp.setActionCommand(btns[btn][1]); | |
btnTmp.addActionListener(al); | |
btnPanel.add(btnTmp); | |
} | |
JCheckBox checkTmp = new JCheckBox("Secret mode...", false); | |
checkTmp.addItemListener(new ItemListener() { | |
public void itemStateChanged(ItemEvent e) { | |
SnowPanel.this.colorChangeMode = (e.getStateChange() == ItemEvent.SELECTED); | |
} | |
}); | |
btnPanel.add(checkTmp, btns.length / 2); | |
btnPanel.validate(); | |
setPreferredSize(BOARD_SIZE); | |
setBackground(Color.cyan); | |
add(scoreLabel); | |
add(btnPanel); | |
} | |
public void createSnowGame() { | |
boardLeft = 0; | |
boardRight = BOARD_SIZE.width; | |
boardTop = 80; // The top of the game is 80. | |
boardBottom = BOARD_SIZE.height - 10; // Minus 10 because that's the game baseline | |
resetGame(); | |
} | |
public int getGameState() { | |
return gameState; | |
} | |
public void setGameState(int gameState) { | |
this.gameState = gameState; | |
} | |
public void addSnowFlake() { | |
float velMax = 1.5F; // Just a value because lol y not? | |
float sfX = randomFloat(boardLeft, boardRight); | |
float sfY = boardTop; | |
float xVel = randomFloat(-velMax, velMax); | |
synchronized(allFlakes) { | |
SnowFlake sf = new SnowFlake(sfX, sfY, xVel, SnowFlake.DEFAULT_Y_VELOCITY); | |
allFlakes.add(sf); | |
} | |
} | |
public void startGame() { | |
setGameState(GAME_STATE_STARTED); | |
} | |
public void winGame(SnowFlake sf) { | |
score += 1 + (this.colorChangeMode ? 0.5F : 0F); | |
highScore = score > highScore ? score : highScore; | |
synchronized(allFlakes) { | |
allFlakes.remove(sf); | |
} | |
} | |
public void loseGame() { | |
setGameState(GAME_STATE_LOSE); | |
} | |
public void resetGame() { | |
setGameState(GAME_STATE_NOT_STARTED); | |
updateScoreString(); | |
synchronized(allFlakes) { | |
allFlakes.removeAll(allFlakes); // empties the entire array list | |
score = 0; | |
spawnRate = DEFAULT_SPAWN_RATE; | |
catchX = 250; | |
catchY = boardBottom - catchHeight; | |
lastSpawn = 0; | |
spawnRate = DEFAULT_SPAWN_RATE; | |
} | |
} | |
public void updateGame() { | |
if(getGameState() != GAME_STATE_STARTED) return; // Don't update if we're not playing... | |
moveFlakes(); | |
if(now() - lastSpawn > spawnRate) { | |
addSnowFlake(); | |
lastSpawn = now(); | |
spawnRate -= SPAWN_RATE_DECAY; | |
spawnRate = Math.max(spawnRate, SPAWN_RATE_DECAY); // Clamp above SPAWN_RATE_DECAY | |
} | |
} | |
public void moveFlakes() { | |
if(getGameState() != GAME_STATE_STARTED) return; | |
// Synchronize this because IN THE OFF CHANCE that we access all flakes twice at | |
// once! | |
// Here we loop through all the flakes, move them, check their boundaries, and | |
// then check if it's been caught! | |
SnowFlake s; | |
synchronized(allFlakes) { | |
for(int i = 0; i < allFlakes.size(); i++) { | |
s = allFlakes.get(i); | |
s.update(); | |
s.checkBoundaries(boardTop, boardRight, boardBottom, boardLeft); | |
if(s.isEndOfLife()) { | |
if(catchX - catchWidth / 2 <= s.getX() && s.getX() <= catchX + catchWidth / 2) winGame(s); | |
else loseGame(); | |
} | |
} | |
} | |
updateScoreString(); | |
} | |
/** | |
* Moves the catcher according to the amount of steps requested multiplied | |
* by | |
* the catcher's speed. The default speed is {@value #CATCHER_SPEED} as | |
* defined | |
* by {@link #CATCHER_SPEED}. | |
* | |
* Positive steps moves the catcher right, while negative steps move the | |
* catcher | |
* left. | |
* | |
* @param steps | |
* How many steps of {@link #CATCHER_SPEED} to take. | |
*/ | |
public void moveCatcher(float steps) { | |
if(getGameState() != GAME_STATE_STARTED) return; | |
steps *= catchSpeed; | |
catchX += steps; | |
catchX = (catchX - catchWidth / 2) <= 0 ? catchWidth / 2 : (catchX + catchWidth / 2) >= boardRight ? boardRight - catchWidth / 2 : catchX; | |
} | |
public void updateScoreString() { | |
this.scoreLabel.setText(getScoreString()); | |
} | |
public String getScoreString() { | |
return "Score: " + (int) this.score + " ---- High Score: " + (int) this.highScore; | |
} | |
/** | |
* This updates the game's logic after rendering it to the screen. | |
* | |
* Ideally a new thread should've been created to call update and repaint, | |
* or | |
* better yet, a more stable "sleep timer" could be used (instead of always | |
* sleeping 20ms, ie, sleep the remainder of 20ms from | |
* {@link System#currentTimeMillis()}). | |
*/ | |
@Override | |
protected void paintComponent(Graphics g) { | |
Color flakeColor = DEFAULT_FLAKE_COLOR; | |
Color catcherColor = DEFAULT_CATCHER_COLOR; | |
Color boardColor = DEFAULT_BOARD_COLOR; | |
if(this.colorChangeMode) { | |
flakeColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255)); | |
catcherColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255)); | |
boardColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255)); | |
} | |
if(this.getBackground() != boardColor) { | |
this.setBackground(boardColor); | |
this.validate(); | |
} | |
super.paintComponent(g); | |
g.setColor(flakeColor); | |
drawSnowFlakes(g); | |
g.setColor(catcherColor); | |
drawCatcher(g); | |
// Only go through here if we know our game state is "running" | |
if(getGameState() != GAME_STATE_STARTED) { | |
drawEndgameString(g); | |
} | |
try { | |
// Make Logic Changes | |
updateGame(); | |
Thread.sleep(20); | |
repaint(); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
public void drawSnowFlakes(Graphics g) { | |
synchronized(allFlakes) { | |
for(SnowFlake s : allFlakes) { | |
s.draw(g); | |
} | |
} | |
} | |
public void drawCatcher(Graphics g) { | |
g.fillOval((int) (catchX - (catchWidth / 2)), (int) (catchY), (int) catchWidth, (int) catchHeight); // brackets | |
// make math | |
// easy! | |
} | |
public void drawEndgameString(Graphics g) { | |
String stateString = ""; | |
if(getGameState() == GAME_STATE_LOSE) stateString = "You Lose!"; | |
else if(getGameState() == GAME_STATE_WIN) stateString = "You Win!"; // This won't ever really get called... | |
g.setColor(Color.BLACK); | |
g.setFont(GAME_FONT); | |
g.drawString(stateString, (getWidth() - fontMets.stringWidth(stateString)) / 2, (getHeight() - fontMets.getHeight()) / 2); | |
} | |
public static long now() { | |
return System.currentTimeMillis(); | |
} | |
public static int randomInt(int min, int max) { | |
return new Random().nextInt(max - min) + min; | |
} | |
public static float randomFloat(float min, float max) { | |
return new Random().nextFloat() * (max - min) + min; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Color; | |
import java.awt.Dimension; | |
import java.awt.Font; | |
import java.awt.FontMetrics; | |
import java.awt.Graphics; | |
import java.awt.event.ActionEvent; | |
import java.awt.event.ActionListener; | |
import java.awt.event.ItemEvent; | |
import java.awt.event.ItemListener; | |
import java.util.ArrayList; | |
import java.util.Random; | |
import javax.swing.JButton; | |
import javax.swing.JCheckBox; | |
import javax.swing.JLabel; | |
import javax.swing.JPanel; | |
/** | |
* The SnowPanel is what actually <em>IS</em> the game. It holds the main update | |
* and draw functions and is actually what shows inside of the frame in | |
* {@link SnowDriver}. | |
* | |
* @author z5217759 - Jarod Brennfleck | |
* @assessmentItem Assignment 3 | |
* @date 17 Aug. 2019 | |
*/ | |
public class SnowPanel extends JPanel { | |
private static final long serialVersionUID = 65752066642573530L; | |
public static final int GAME_STATE_NOT_STARTED = -1; | |
public static final int GAME_STATE_STARTED = 0; | |
public static final int GAME_STATE_WIN = 1; | |
public static final int GAME_STATE_LOSE = 2; | |
public static final float CATCHER_SPEED = 15; | |
public static final long DEFAULT_SPAWN_RATE = 4000; | |
public static final long SPAWN_RATE_DECAY = 125; | |
public static final Color DEFAULT_FLAKE_COLOR = Color.WHITE; | |
public static final Color DEFAULT_CATCHER_COLOR = Color.WHITE; | |
public static final Color DEFAULT_BOARD_COLOR = Color.BLUE; | |
public static final Dimension BOARD_SIZE = new Dimension(500, 400); | |
public static final Font GAME_FONT = new Font("Roboto", Font.BOLD | |
| Font.ITALIC, 20); | |
private JPanel btnPanel; | |
private JLabel scoreLabel; | |
private FontMetrics fontMets; | |
private int boardTop = 80; | |
private int boardBottom; | |
private int boardLeft = 0; | |
private int boardRight; | |
private ArrayList<SnowFlake> allFlakes; | |
private float catchX; | |
private float catchY; | |
private float catchWidth = 40; | |
private float catchHeight = 20; | |
private float catchSpeed = CATCHER_SPEED; | |
private int gameState = GAME_STATE_NOT_STARTED; | |
private float score = 0; | |
private float highScore = score; | |
private long spawnRate = DEFAULT_SPAWN_RATE; | |
private long lastSpawn = 0; | |
private boolean colorChangeMode = false; | |
public SnowPanel() { | |
allFlakes = new ArrayList<SnowFlake>(); | |
createPanel(); | |
createSnowGame(); | |
fontMets = getFontMetrics(GAME_FONT); | |
} | |
public void createPanel() { | |
ActionListener al = new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
float catcherMovement = 0; | |
String cmd = e.getActionCommand(); | |
if(cmd.equals("left1")) catcherMovement -= 1; | |
else if(cmd.equals("left2")) catcherMovement -= 2; | |
else if(cmd.equals("left3")) catcherMovement -= 3; | |
else if(cmd.equals("right1")) catcherMovement += 1; | |
else if(cmd.equals("right2")) catcherMovement += 2; | |
else if(cmd.equals("right3")) catcherMovement += 3; | |
else if(cmd.equals("reset")) { | |
if(getGameState() == GAME_STATE_WIN | |
|| getGameState() == GAME_STATE_LOSE) { | |
resetGame(); | |
} | |
} else if(cmd.equals("start")) { | |
if(getGameState() == GAME_STATE_NOT_STARTED) { | |
startGame(); | |
} | |
} | |
moveCatcher(catcherMovement); | |
// one line clamp statement. | |
// is the exact same as: | |
// if((catchX - catchWidth / 2) <= 0) catchX = catchWidth / 2; | |
// else if((catchX + catchWidth / 2) >= boardRight) catchX = boardRight - | |
// catchWidth / 2; | |
/* | |
* I won't `repaint()` here because that will change the frame | |
* rate! Although | |
* minutely, it will still happen!!! | |
*/ | |
} | |
}; | |
scoreLabel = new JLabel(); | |
updateScoreString(); | |
btnPanel = new JPanel(); | |
btnPanel.setPreferredSize(new Dimension(BOARD_SIZE.width, 40)); | |
btnPanel.setBackground(Color.blue); | |
// This method is more extensible and easier to manage. | |
//@formatter:off | |
String[][] btns = { | |
{"<<<", "left3"}, | |
{"<<", "left2"}, | |
{"<", "left1"}, | |
{"Reset", "reset"}, | |
{"Start", "start"}, | |
{">", "right1"}, | |
{">>", "right2"}, | |
{">>>", "right3"} | |
}; | |
//@formatter:on | |
JButton btnTmp; | |
for(int btn = 0; btn < btns.length; btn++) { | |
btnTmp = new JButton(btns[btn][0]); | |
btnTmp.setActionCommand(btns[btn][1]); | |
btnTmp.addActionListener(al); | |
btnPanel.add(btnTmp); | |
} | |
JCheckBox checkTmp = new JCheckBox("Secret mode...", false); | |
checkTmp.addItemListener(new ItemListener() { | |
public void itemStateChanged(ItemEvent e) { | |
SnowPanel.this.colorChangeMode = (e.getStateChange() == ItemEvent.SELECTED); | |
} | |
}); | |
btnPanel.add(checkTmp, btns.length | |
/ 2); | |
btnPanel.validate(); | |
setPreferredSize(BOARD_SIZE); | |
setBackground(Color.cyan); | |
add(scoreLabel); | |
add(btnPanel); | |
} | |
public void createSnowGame() { | |
boardLeft = 0; | |
boardRight = BOARD_SIZE.width; | |
boardTop = 80; // The top of the game is 80. | |
boardBottom = BOARD_SIZE.height | |
- 10; // Minus 10 because that's the game baseline | |
resetGame(); | |
} | |
public int getGameState() { | |
return gameState; | |
} | |
public void setGameState(int gameState) { | |
this.gameState = gameState; | |
} | |
public void addSnowFlake() { | |
float velMax = 1.5F; // Just a value because lol y not? | |
float sfX = randomFloat(boardLeft, boardRight); | |
float sfY = boardTop; | |
float xVel = randomFloat(-velMax, velMax); | |
synchronized(allFlakes) { | |
SnowFlake sf = new SnowFlake(sfX, sfY, xVel, SnowFlake.DEFAULT_Y_VELOCITY); | |
allFlakes.add(sf); | |
} | |
} | |
public void startGame() { | |
setGameState(GAME_STATE_STARTED); | |
} | |
public void winGame(SnowFlake sf) { | |
score += 1 | |
+ (this.colorChangeMode ? 0.5F : 0F); | |
highScore = score > highScore ? score : highScore; | |
synchronized(allFlakes) { | |
allFlakes.remove(sf); | |
} | |
} | |
public void loseGame() { | |
setGameState(GAME_STATE_LOSE); | |
} | |
public void resetGame() { | |
setGameState(GAME_STATE_NOT_STARTED); | |
updateScoreString(); | |
synchronized(allFlakes) { | |
allFlakes.removeAll(allFlakes); // empties the entire array list | |
score = 0; | |
spawnRate = DEFAULT_SPAWN_RATE; | |
catchX = 250; | |
catchY = boardBottom | |
- catchHeight; | |
lastSpawn = 0; | |
spawnRate = DEFAULT_SPAWN_RATE; | |
} | |
} | |
public void updateGame() { | |
if(getGameState() != GAME_STATE_STARTED) return; // Don't update if we're not playing... | |
moveFlakes(); | |
if(now() - lastSpawn > spawnRate) { | |
addSnowFlake(); | |
lastSpawn = now(); | |
spawnRate -= SPAWN_RATE_DECAY; | |
spawnRate = Math.max(spawnRate, SPAWN_RATE_DECAY); // Clamp above SPAWN_RATE_DECAY | |
} | |
} | |
public void moveFlakes() { | |
if(getGameState() != GAME_STATE_STARTED) return; | |
// Synchronize this because IN THE OFF CHANCE that we access all flakes twice at | |
// once! | |
// Here we loop through all the flakes, move them, check their boundaries, and | |
// then check if it's been caught! | |
SnowFlake s; | |
synchronized(allFlakes) { | |
for(int i = 0; i < allFlakes.size(); i++) { | |
s = allFlakes.get(i); | |
s.update(); | |
s.checkBoundaries(boardTop, boardRight, boardBottom, boardLeft); | |
if(s.isEndOfLife()) { | |
if(catchX | |
- catchWidth | |
/ 2 <= s.getX() | |
&& s.getX() <= catchX | |
+ catchWidth | |
/ 2) winGame(s); | |
else loseGame(); | |
} | |
} | |
} | |
updateScoreString(); | |
} | |
/** | |
* Moves the catcher according to the amount of steps requested multiplied | |
* by | |
* the catcher's speed. The default speed is {@value #CATCHER_SPEED} as | |
* defined | |
* by {@link #CATCHER_SPEED}. | |
* | |
* Positive steps moves the catcher right, while negative steps move the | |
* catcher | |
* left. | |
* | |
* @param steps | |
* How many steps of {@link #CATCHER_SPEED} to take. | |
*/ | |
public void moveCatcher(float steps) { | |
if(getGameState() != GAME_STATE_STARTED) return; | |
steps *= catchSpeed; | |
catchX += steps; | |
catchX = (catchX | |
- catchWidth | |
/ 2) <= 0 ? catchWidth | |
/ 2 : (catchX | |
+ catchWidth | |
/ 2) >= boardRight ? boardRight | |
- catchWidth | |
/ 2 : catchX; | |
} | |
public void updateScoreString() { | |
this.scoreLabel.setText(getScoreString()); | |
} | |
public String getScoreString() { | |
return "Score: " | |
+ (int) this.score | |
+ " ---- High Score: " | |
+ (int) this.highScore; | |
} | |
/** | |
* This updates the game's logic after rendering it to the screen. | |
* | |
* Ideally a new thread should've been created to call update and repaint, | |
* or | |
* better yet, a more stable "sleep timer" could be used (instead of always | |
* sleeping 20ms, ie, sleep the remainder of 20ms from | |
* {@link System#currentTimeMillis()}). | |
*/ | |
@Override | |
protected void paintComponent(Graphics g) { | |
Color flakeColor = DEFAULT_FLAKE_COLOR; | |
Color catcherColor = DEFAULT_CATCHER_COLOR; | |
Color boardColor = DEFAULT_BOARD_COLOR; | |
if(this.colorChangeMode) { | |
flakeColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255)); | |
catcherColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255)); | |
boardColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255)); | |
} | |
if(this.getBackground() != boardColor) { | |
this.setBackground(boardColor); | |
this.validate(); | |
} | |
super.paintComponent(g); | |
g.setColor(flakeColor); | |
drawSnowFlakes(g); | |
g.setColor(catcherColor); | |
drawCatcher(g); | |
// Only go through here if we know our game state is "running" | |
if(getGameState() != GAME_STATE_STARTED) { | |
drawEndgameString(g); | |
} | |
try { | |
// Make Logic Changes | |
updateGame(); | |
Thread.sleep(20); | |
repaint(); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
public void drawSnowFlakes(Graphics g) { | |
synchronized(allFlakes) { | |
for(SnowFlake s : allFlakes) { | |
s.draw(g); | |
} | |
} | |
} | |
public void drawCatcher(Graphics g) { | |
g.fillOval((int) (catchX | |
- (catchWidth | |
/ 2)), (int) (catchY), (int) catchWidth, (int) catchHeight); // brackets | |
// make math | |
// easy! | |
} | |
public void drawEndgameString(Graphics g) { | |
String stateString = ""; | |
if(getGameState() == GAME_STATE_LOSE) stateString = "You Lose!"; | |
else if(getGameState() == GAME_STATE_WIN) stateString = "You Win!"; // This won't ever really get called... | |
g.setColor(Color.BLACK); | |
g.setFont(GAME_FONT); | |
g.drawString(stateString, (getWidth() | |
- fontMets.stringWidth(stateString)) | |
/ 2, (getHeight() | |
- fontMets.getHeight()) | |
/ 2); | |
} | |
public static long now() { | |
return System.currentTimeMillis(); | |
} | |
public static int randomInt(int min, int max) { | |
return new Random().nextInt(max | |
- min) | |
+ min; | |
} | |
public static float randomFloat(float min, float max) { | |
return new Random().nextFloat() | |
* (max - min) | |
+ min; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// file extension is txt because json objects aren't json strings... | |
{ | |
message:'[Trace - 11:16:08 pm] Sending request \'textDocument/codeAction - (21977)\'.', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.199' | |
}{ | |
message:'Params: {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n}\n\n', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.200' | |
}{ | |
message:'[Trace - 11:16:08 pm] Received response \'textDocument/codeAction - (21977)\' in 58ms.', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.257' | |
}{ | |
message:'Result: [\n {\n "title": "Organize imports",\n "kind": "source.organizeImports",\n "diagnostics": [],\n "command": {\n "title": "Organize imports",\n "command": "java.action.organizeImports",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Override/Implement Methods...",\n "kind": "source.overrideMethods",\n "diagnostics": [],\n "command": {\n "title": "Override/Implement Methods...",\n "command": "java.action.overrideMethodsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate Getters and Setters...",\n "kind": "source.generate.accessors",\n "diagnostics": [],\n "command": {\n "title": "Generate Getters and Setters...",\n "command": "java.action.generateAccessorsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate hashCode() and equals()...",\n "kind": "source.generate.hashCodeEquals",\n "diagnostics": [],\n "command": {\n "title": "Generate hashCode() and equals()...",\n "command": "java.action.hashCodeEqualsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate toString()...",\n "kind": "source.generate.toString",\n "diagnostics": [],\n "command": {\n "title": "Generate toString()...",\n "command": "java.action.generateToStringPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate Constructors...",\n "kind": "source.generate.constructors",\n "diagnostics": [],\n "command": {\n "title": "Generate Constructors...",\n "command": "java.action.generateConstructorsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate Delegate Methods...",\n "kind": "source.generate.delegateMethods",\n "diagnostics": [],\n "command": {\n "title": "Generate Delegate Methods...",\n "command": "java.action.generateDelegateMethodsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n }\n]\n\n', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.257' | |
}{ | |
message:'[Trace - 11:16:08 pm] Sending request \'textDocument/formatting - (21978)\'.', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.260' | |
}{ | |
message:'Params: {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "options": {\n "tabSize": 4,\n "insertSpaces": false\n }\n}\n\n', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.260' | |
}{ | |
message:'[Trace - 11:16:08 pm] Received response \'textDocument/formatting - (21978)\' in 11ms.', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.271' | |
}{ | |
message:'Result: [\n {\n "range": {\n "start": {\n "line": 43,\n "character": 66\n },\n "end": {\n "line": 43,\n "character": 67\n }\n },\n "newText": "\\r\\n\\t\\t\\t"\n }\n]\n\n', | |
level:'info', | |
timestamp:'2019-09-15 23:16:08.272' | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment